我们正在使用由LoadingCache
构建的番石榴CacheLoader
。
我们正在寻找的是一个缓存,它会定期刷新其内容,但如果不再访问密钥,也会在给定(更长)的时间范围后使密钥失效。
是否可以在同一.refresAfterWrite(30, TimeUnit.SECONDS)
上使用.expireAfterAccess(10,TimeUnit.MINUTES)
和CacheLoader
?
我的经验是,由于通过refreshAfterWrite
定期重新加载,密钥永远不会被驱逐。文档让我对这一点有点不确定。
答案 0 :(得分:1)
这应该按照您的意愿行事。来自CacheBuilder
文档:
当发生对条目的第一个陈旧请求时,执行当前自动刷新。触发刷新的请求将对CacheLoader.reload(K,V)进行阻塞调用,如果返回的未来完成则立即返回新值,否则返回旧值。
因此,如果在最后一次写入后30秒查询密钥,它将被刷新;如果在上次访问后10分钟内未查询,则在没有刷新的情况下,它将有资格到期。