组合使用Guava Cache CacheLoader.refreshAfterWrite()和.expireAfterAccess()

时间:2014-03-12 17:57:05

标签: java caching guava

我们正在使用由LoadingCache构建的番石榴CacheLoader

我们正在寻找的是一个缓存,它会定期刷新其内容,但如果不再访问密钥,也会在给定(更长)的时间范围后使密钥失效。

是否可以在同一.refresAfterWrite(30, TimeUnit.SECONDS)上使用.expireAfterAccess(10,TimeUnit.MINUTES)CacheLoader

我的经验是,由于通过refreshAfterWrite定期重新加载,密钥永远不会被驱逐。文档让我对这一点有点不确定。

1 个答案:

答案 0 :(得分:1)

这应该按照您的意愿行事。来自CacheBuilder文档:

  

当发生对条目的第一个陈旧请求时,执行当前自动刷新。触发刷新的请求将对CacheLoader.reload(K,V)进行阻塞调用,如果返回的未来完成则立即返回新值,否则返回旧值。

因此,如果在最后一次写入后30秒查询密钥,它将被刷新;如果在上次访问后10分钟内未查询,则在没有刷新的情况下,它将有资格到期。