EHCache刷新时保持磁盘上的持久性副本

时间:2015-03-10 10:20:01

标签: spring caching refresh persistence ehcache

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

我的项目要求每隔15分钟从数据库刷新一次缓存。从数据库中提取数据平均需要一分钟。因此,当这一分钟操作(缓存从db刷新)时,如果我尝试访问缓存,它应该返回先前存储的值。

时间表是 - >

0分钟:应用程序启动。缓存刷新的触发器。

0.5分钟:通过查询数据库

加载缓存

1分钟:加载缓存(例如:xyz)

5分钟:访问缓存并返回xyz

15分钟:缓存应该刷新(新的缓存值将是16分钟的xyw)

15.5分钟:通过查询数据库加载缓存。此时,如果访问高速缓存,它应返回先前的高速缓存值,因为新高速缓存现在处于不一致状态。 (应该返回xyz)

16分钟:重新加载缓存。如果现在访问,则应返回xyq。

我有两个问题:

  1. 现在我有一个spring任务调度程序,每15分钟执行一次缓存刷新。我可以用ehcache本身吗?
    我的ehcache.xml看起来像:
  2. <ehcache>
        <cache name="mycache" 
            maxElementsInMemory="3000"
            eternal="false" 
            timeToIdleSeconds="60000"  
            timeToLiveSeconds="60000"  
            overflowToDisk="true"  
            diskPersistent="false" />
            <persistence strategy="localTempSwap" synchronousWrites="true" />
        </cache>  
    </ehcache>
    
    1. 如何在15.5分钟内实现此缓存的行为?

1 个答案:

答案 0 :(得分:0)

数目:

  1. Ehcache有一个使用Quartz调度程序的预定刷新装饰器。有关如何使用它,请参阅此documentation
  2. 除非您使刷新过程具有事务性,否则Ehcache不会提供此行为。否则,您将在获得密钥时点击映射到密钥的任何值。