在我的场景中,获取新鲜(非缓存)值是一项非常昂贵的操作,因此必须始终存在预先计算的缓存值,而不是像 EhCache 那样在读取时刷新它们。
为此,让一个线程在 TTL 到期时触发并用新值重新填充缓存听起来很合理,因此不会有任何读取等待。
有没有办法使用 Ehcache 来实现这一点?监听 OnElementExpired/Evicted 事件来重新填充缓存似乎是不可能的(当我收到该事件时,读取已经在等待)。
我想我可以使缓存本身永恒,并拥有自己的计划任务来重新填充,但随后我从 EhCache 中得不到任何东西,而不是我现在拥有的哑 map 。事情真的是这样吗?在这种情况下有没有办法让EhCache帮助我?
最佳答案
Ehcache 提供了一种通过计划刷新执行您想要的操作的方法。
为了使其与 Ehcache 一起工作,您需要做两件事:
- 使用 cache loader - 即转向缓存读取模式。这是必需的,否则 Ehcache 不知道如何获取映射到键的数据。
- 配置scheduled refresh - 这通过启动 quartz 调度程序实例来实现。
关于java - 立即重新填充 EhCache,而不是等待读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214191/