在我的场景中,获取新的(非缓存)值是一项非常昂贵的操作,因此必须始终存在预先计算的缓存值,而不是在读取时刷新它们,就像EhCache似乎那样。
为此,在TTL到期时触发线程以新值重新填充缓存是合理的,因此没有读取等待。
有没有办法使用Ehcache实现这一目标?侦听OnElementExpired / Evicted事件以重新填充缓存似乎是不行的(当我收到事件时,读取已经在等待)。
我想我可以让缓存本身永恒,并且我自己的计划任务可以重新填充,但是后来我从EhCache那里得到的任何东西都没有。这真的是这样吗?在这种情况下,没有办法让EhCache帮助我吗?
答案 0 :(得分:1)
看一下EHCache提供的RefreshAheadCache。
但是,我找不到任何使用和指标的例子,这是成熟的。
班上的评论说:
实现预读刷新的缓存装饰器。在缓存条目到期之前访问缓存条目时会发生预读,并触发在后台重新加载值。
如下所述,这并没有直接解决问题:
我的问题是如何重新填充缓存而不等待读取触发它
据我所知,没有标准的方法可以做到这一点。原因是,到期时间不是基于计时器的。
(无耻)提示:由于我认为这非常有用,我在cache2k中实现了这一点。该功能称为后台刷新,由CacheBuilder.backgroundRefresh(true)
启用。
答案 1 :(得分:1)
Ehcache提供了一种通过预定刷新完成所需操作的方法。
为了使这项功能与Ehcache一起使用,您将需要两件事:
答案 2 :(得分:0)
可能是这段代码可以帮助: