我正在使用Google Guava CacheBuilder
来创建Cache
个实例。我的代码如下所示:
return CacheBuilder.newBuilder()
.initialCapacity(initialCapacity)
.expireAfterAccess(expirationInterval, TimeUnit.SECONDS)
.removalListener(LOGGING_AUTOEVICTION_ONLY_REMOVAL_LISTENER)
.build();
我的删除侦听器,顾名思义:
private static final RemovalListener<MyKey, MyRecord> LOGGING_AUTOEVICTION_ONLY_REMOVAL_LISTENER
= new RemovalListener<MyKey, MyRecord>() {
@Override
public void onRemoval(RemovalNotification<MyKey, MyRecord objectObjectRemovalNotification) {
if (objectObjectRemovalNotification.wasEvicted()) {
log.debug("Entry evicted from cache: {} - Reason: {}", objectObjectRemovalNotification, objectObjectRemovalNotification.getCause());
}
}
};
最后,我只使用get
get(K key, Callable<? extends V> valueLoader)
条目进入缓存
以下是问题:使用上面的代码,我看到以下日志输出:
19:08:03.287 DEBUG [MyCache] - Entry evicted from cache: MyKey[123]=MyRecord@43ee148b - Reason: SIZE
为什么在CacheBuilder调用中没有使用maximumSize()
时,记录会从我的缓存中逐出?我怀疑它与“体重”有关。如果是这样,我需要了解maxWeight()
在到期时间之前没有被删除的缓存条目?
注意我知道Google Guava网站上的Caches Explained。
答案 0 :(得分:7)
您的expirationInterval
是否可能意外地等于零?作为expireAfterAccess
文档,“当duration
为零时,此方法将移至maximumSize(0)
。”