【发布时间】:2018-10-01 09:03:07
【问题描述】:
我们希望使用 guava 缓存来缓存第三方数据以获得更好的响应时间。需要通过一系列 api 调用来预加载缓存(大约 4000 次 api 调用)。 api 响应包含缓存键及其值。这些 api 调用需要从多个线程(即线程池)并行进行,以加快缓存加载。 每个缓存条目都有一个过期时间。这可以使用 expireAfterAccess() 调用来设置。 缓存条目过期后,需要在后台自动刷新。还应该有一种方法(api),通过它我们可以停止这种后台缓存刷新,这样我们就不会无休止地进行 api 调用。一旦在配置的时间间隔后停止接收用户请求,我们将调用此 api。
是否可以将缓存加载和刷新的线程管理委托给番石榴?即给定api调用,将json响应映射到java对象和缓存键值设计的代码,guava可以自己执行预加载和刷新吗?
谢谢。
【问题讨论】:
-
AFIAK Guava 没有刷新功能。具有此功能的轻量级进程缓存替代品将是 Caffeine 或 cache2k。这是最近关于该主题的讨论:github.com/ben-manes/caffeine/issues/261。请修改您的问题,以防您接受 Guava 的替代建议。
-
@cruftex - 感谢您的评论。您是否在最新版本 (v26) 和即将发布的路线图中验证了这一点?没有办法执行自动刷新?
-
有趣。我仔细检查了一下,实际上我错了。番石榴具有自动刷新功能。