【问题标题】:Storing date range in cache keys在缓存键中存储日期范围
【发布时间】:2014-03-20 09:48:26
【问题描述】:

我的数据库行有如下示例数据

例子

StoreId    ProductId  Eff_Date         End_Date       Discount  
123        456        01-01-2001       12-31-2001     10%  
123        456        01-01-2002       12-31-2002     15% 

当客户进来时,我的代码会检查折扣,例如 从 storeId='123' and productId='456' and current_date=Eff_date 的表中选择折扣。

这绝对没问题。

我们需要将上述数据存储在缓存中。我们如何将这些日期范围存储在缓存键中,以便在客户购买商品时,我们会找到正确的缓存键值对。

仅供参考,我们还没有决定使用什么缓存框架。请让我知道哪个缓存框架将支持此要求。

谢谢。

【问题讨论】:

  • Joda Time 作为时间操作 API 有一个 Interval 类,您可以在这里找到有用的...
  • 是的,Joda-Time Interval 可能会有所帮助。但请注意,它是“半开放”的,其中时间跨度的开始包含在内,结束则不包含。这种方法通常适用于跨时间工作。因此,在您的情况下,End_Date 将是下一年的第一天,而不是目标年份的最后一天。此外,如果您的企业有任何机会处理其他时区,那么您应该使用日期时间 (DateTime) 值而不是仅日期 (LocalDate) 值。

标签: java caching memcached ehcache


【解决方案1】:

我正在尝试实现类似的东西。我正在尝试从 Github 检索多个数据并根据时间戳进行存储。我会将它用作:文件名 + 时间戳作为键,文件结果作为值。

我建议使用 STOREID + PRODUCTID + End_DATE 作为键。您可以使用分隔符连接所有这 3 个。

价值

折扣%

解决方案

  • 从结束日期开始,您可以轻松获得 Eff_date,即同一年的 1 月 1 日
  • 您可以使用线程安全的 ConcurrentLinkedHashMap。
  • 现在从您的地图中获取 keySet 并使用函数循环键并将键分解为 3 个单独的变量,然后查看您的条件是否满足。
  • 例如。你的要求。适用于 2002 年 7 月 3 日的 Store 123 和 Product 456 支票折扣
  • 从地图返回的键是'123/456/12-31-2002'
  • 在“/”上拆分,现在获取第一个和第二个条目以验证商店和产品 ID 是否匹配
  • 然后检查日期是否介于 01-01-2002 和 12-31-2002 之间,如果是,则您已满足所有条件并返回主密钥。
  • 现在获取此键的值。

这有点不合常规,可能看起来很长,但会节省不必要的数据库调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2017-03-24
    • 2018-10-14
    • 2016-06-14
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多