GoogleGuavaを使用してインスタンス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
maximumSize()
CacheBuilderの呼び出しで使用しなかったのに、レコードがキャッシュから削除されるのはなぜですか?「重さ」と関係があるのではないかと思います。maxWeight()
もしそうなら、有効期限の前にキャッシュエントリを削除しないようにするために何を知る必要がありますか?
注GoogleGuavaサイトで説明されているキャッシュを知っています。