缓存刷新时,ehCache是​​否可以返回旧的缓存值

时间:2015-03-04 22:05:56

标签: java spring caching ehcache

我正在使用Spring框架和Java CXF服务。

有几个客户端访问固定的数据列表,这些数据从数据库中提取。由于从数据库中获取是一个昂贵的调用,数据库并没有经常更改,我认为缓存值很好。

数据库刷新 - >每天15次,无限期间

缓存刷新 - >每15分钟一次。

通过调用DB加载缓存需要15秒。

现在,如果通过调用DB来刷新缓存,则需要15秒。在这15秒内,如果客户想要访问数据,我可以在缓存中发送以前的数据。应用程序是可以容忍陈旧和过时的数据,而不是等待15秒(有一个delta函数,它在加载时间缓存后带来数据非常便宜)。在缓存以15分钟的固定间隔刷新时,ehcache是​​否有一种方法可以在加载新数据时在缓存中返回旧数据?

2 个答案:

答案 0 :(得分:0)

  

本地磁盘上缓存的一致副本为业务需求提供了许多可能性,例如根据基于时间的需求处理不同的数据集或将数据集移动到不同的位置。它的范围从具有快速读取性能的简单键值持久性机制到在读取和写入操作期间具有内存速度的操作存储。

Ehcache有一个RestartStore,它提供快速重启和缓存持久性选项。 RestartStore实现内存缓存的磁盘镜像。重新启动后,缓存中最后一个数据将自动从磁盘加载到RestartStore,从那里数据将可用于缓存。

通过将子元素添加到缓存配置来配置磁盘上的缓存持久性。子元素包括两个属性:strategy和synchronousWrites。

<cache>
  <persistence strategy=”localRestartable|localTempSwap|none|distributed” synchronousWrites=”false|true”/>
</cache>

了解更多信息Ehcache

答案 1 :(得分:0)

  • 如果您使用“缓存旁边”模式,并且您的应用程序代码负责重新加载缓存数据,则在缓存数据到期之前,只要缓存保存映射,您就会准确地观察到所需的行为。
  • 如果您使用“缓存通过”模式,使用缓存加载器,那么就无法获得这样的行为,因为重新加载映射时它将锁定密钥,从而阻止其他线程尝试访问它在同一时间。