gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:06:21 33 4
gpt4 key购买 nike

我正在使用 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);
}

但在这种情况下,您可能需要覆盖 MyCacheLoader 中的 CacheLoader.reload(K, V) 方法,以便它异步执行。

至于第二个问题,不行,Guava 不能设置 per-entry 的过期时间。

关于java - 如何使用 Google Guava 自动刷新缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463675/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com