如何使用Google Guava自动刷新缓存?

西瓦·普拉萨德·雷迪(K. Siva Prasad Reddy):

我正在使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章