【发布时间】:2016-06-17 20:01:39
【问题描述】:
我的用例是我需要在服务之上实现缓存,应该在一定时间后(从创建时间开始)使条目过期。
如果条目即将过期,则应进行服务查找以获取最新条目。让调用是服务刷新。
但是,假设如果服务刷新失败,那么我应该能够使用缓存中的陈旧数据。
但是由于缓存已经过期,我没有那个条目。
所以,我正在考虑控制缓存的过期时间,只有当服务可用于获取最新数据时,缓存条目才会过期,否则不要删除该条目。
我正在研究 Google Guava 缓存,但它只提供了一个删除监听器,它只会通知我该事件,但我无法控制过期事件。
是否有任何第三方缓存实现可以满足我的目的?
【问题讨论】:
-
听起来您不想过期,但
refreshAfterWrite因为您不想删除条目(仅更新其值)。 -
refreshAfterWrite 是在给定的持续时间之后只更新一个条目还是整个缓存?如果刷新时抛出任何异常,那么之前的条目会保持原样还是会抛出异常?我检查了一下,它需要异步覆盖 reload() 方法。你能解释一下为什么异步吗?
-
它是每个条目,在重新加载时返回先前的值,并在第一个调用者的线程上执行,或者可以完全异步。如果您想要完整的定期刷新,最简单的方法是使用
ScheduledExecutorService。
标签: java caching ehcache google-guava-cache