Guava CacheBuilder 提前驱逐项目
Guava CacheBuilder evicts items ahead of schedule
我正在尝试创建一个简单的缓存,我可以在其中存储地图中的一些数据元素。我需要将这些数据保留大约 16 个小时左右,之后我可以让旧项目过期。我正在实例化我的 LoadingCache:
cache = CacheBuilder.newBuilder()
.concurrencyLevel(4)
.weakKeys()
.expireAfterWrite(16, TimeUnit.HOURS)
.build(
new CacheLoader<K, V>() {
public V load(K key) throws Exception {
return getByKey(key);
}
});
有一个进程每分钟向列表添加 ~ 16 项。每隔 12 分钟左右,缓存就会被完全清除。我对导致缓存被清除的原因感到困惑,远远早于 expireAfterWrite() 中设置的时间。
我的猜测是 weakKeys()
负责。如果缓存是唯一引用项目的缓存,则垃圾回收可能会决定删除这些项目。来自番石榴文档:
如果请求 weakKeys、weakValues 或 softValues,缓存中存在的键或值可能会被垃圾收集器回收。
我正在尝试创建一个简单的缓存,我可以在其中存储地图中的一些数据元素。我需要将这些数据保留大约 16 个小时左右,之后我可以让旧项目过期。我正在实例化我的 LoadingCache:
cache = CacheBuilder.newBuilder()
.concurrencyLevel(4)
.weakKeys()
.expireAfterWrite(16, TimeUnit.HOURS)
.build(
new CacheLoader<K, V>() {
public V load(K key) throws Exception {
return getByKey(key);
}
});
有一个进程每分钟向列表添加 ~ 16 项。每隔 12 分钟左右,缓存就会被完全清除。我对导致缓存被清除的原因感到困惑,远远早于 expireAfterWrite() 中设置的时间。
我的猜测是 weakKeys()
负责。如果缓存是唯一引用项目的缓存,则垃圾回收可能会决定删除这些项目。来自番石榴文档:
如果请求 weakKeys、weakValues 或 softValues,缓存中存在的键或值可能会被垃圾收集器回收。