急切地重新加入EhCache而不是等待阅读

时间:2015-08-25 21:13:15

标签: java caching ehcache

在我的场景中,获取新的(非缓存)值是一项非常昂贵的操作,因此必须始终存在预先计算的缓存值,而不是在读取时刷新它们,就像EhCache似乎那样。

为此,在TTL到期时触发线程以新值重新填充缓存是合理的,因此没有读取等待。

有没有办法使用Ehcache实现这一目标?侦听OnElementExpired / Evicted事件以重新填充缓存似乎是不行的(当我收到事件时,读取已经在等待)。

我想我可以让缓存本身永恒,并且我自己的计划任务可以重新填充,但是后来我从EhCache那里得到的任何东西都没有。这真的是这样吗?在这种情况下,没有办法让EhCache帮助我吗?

3 个答案:

答案 0 :(得分:1)

看一下EHCache提供的RefreshAheadCache

但是,我找不到任何使用和指标的例子,这是成熟的。

班上的评论说:

  

实现预读刷新的缓存装饰器。在缓存条目到期之前访问缓存条目时会发生预读,并触发在后台重新加载值。

如下所述,这并没有直接解决问题:

  

我的问题是如何重新填充缓存而不等待读取触发它

据我所知,没有标准的方法可以做到这一点。原因是,到期时间不是基于计时器的。

(无耻)提示:由于我认为这非常有用,我在cache2k中实现了这一点。该功能称为后台刷新,由CacheBuilder.backgroundRefresh(true)启用。

答案 1 :(得分:1)

Ehcache提供了一种通过预定刷新完成所需操作的方法。

为了使这项功能与Ehcache一起使用,您将需要两件事:

  • 使用cache loader - 移动到缓存直读模式。这是必需的,否则Ehcache不知道如何获取映射到密钥的数据。
  • 配置scheduled refresh - 这可以通过启动石英调度程序实例来实现。

答案 2 :(得分:0)

可能是这段代码可以帮助:

https://github.com/jsr107/jsr107spec/issues/328