在缓存键中存储日期范围

时间:2014-02-19 19:59:20

标签: java caching memcached ehcache

我的数据库行包含以下示例数据

示例

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'且productId ='456'且current_date< = EndDate和current_date> = Eff_date。

这绝对没问题。

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

我建议使用STOREID + PRODUCTID + End_DATE作为密钥。您可以使用定界符将所有这3个连接起来。

折扣%

解决方案

  • 从结束日期起,您可以轻松获取Eff_date,即同一年的1月1日
  • 您可以使用线程安全的ConcurrentLinkedHashMap。
  • 现在从地图中获取keySet,并使用一个函数来遍历键并将键分解为3个单独的变量,并确定您的条件是否满足要求。
  • 例如您的要求适用于2002年7月3日的123号商店和456号商品的支票折扣
  • 从地图返回的密钥是“ 123/456 / 12-31-2002”
  • 拆分为“ /”,现在进行第一和第二项输入以验证商店和产品ID是否匹配
  • 然后检查日期是否在2002年1月1日至2002年12月31日之间,如果是,则您满足所有条件并返回主密钥。
  • 现在获取此密钥的值。

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