我正在使用Google Guava库进行缓存。对于自动缓存刷新,我们可以执行以下操作:
cache = CacheBuilder.newBuilder()
.refreshAfterWrite(15, TimeUnit.MINUTES)
.maximumSize(100)
.build(....);
但是,当出现第一个陈旧的条目请求时,将执行自动刷新。
即使没有缓存数据请求,有没有一种自动刷新它的方法?就像每15分钟就要将缓存数据从Db中提取并加载一样,无论是否有人调用了缓存数据。
另外,Guava的缓存过期时间是整个缓存的时间。是否可以根据键使缓存值过期?例如,缓存键为“ NOT_SO_FREQ_CHANGE_DATA”的数据每1小时过期一次,而密钥为“ FREQ_CHANGING_DATA”的数据应每15分钟过期一次吗?
Guava无法批量刷新缓存,但是您可以自己安排定期刷新:
LoadingCache<K, V> cache = CacheBuilder.newBuilder()
.refreshAfterWrite(15, TimeUnit.MINUTES)
.maximumSize(100)
.build(new MyCacheLoader());
for (K key : cache.asMap().keySet()) {
cache.refresh(key);
}
但是在那种情况下,您可能想要覆盖其中的CacheLoader.reload(K, V)
方法,MyCacheLoader
以便它异步执行。
至于第二个问题,不,您不能在Guava中设置每个条目的到期时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句