この問題は、Guava Cacheが正しい方法で確実に使用されるように、観察された動作を検証することです。GuavaキャッシュexpireAfterWriteは、getIfPresentを使用する場合にのみ適用できますか?
私が持っているセットアップ2つのグアバキャッシュ(以下のコードを参照してください):ととビルダーなし - グァバdocumentation状態として:値をクリーンアップを実行し、追い出していないCacheBuilderで構築された
キャッシュ 「自動」または値の有効期限が切れた直後、または のいずれかがソートされます。
はgetIfPresent()
方法が使用される場合、その有効期限のみ観察され表示され、すなわち、鍵が照会されたときにnull
の値は一定期間後に返される>満了間隔はキー/値がキャッシュに書き込まれる際に通過します。 get()
またはgetUnchecked()
を使用してCacheLoader.load()
メソッドが実行されるようにCacheLoaderを使用して構築されたキャッシュの場合、有効期限は実行されません。つまり、null
値は返されません。
これは正しいのでしょうか?
ご理解とご協力をいただきありがとうございます。
// excerpt from test code
private static final FakeTicker fakeTicker = new FakeTicker();
private static LoadingCache<Integer, String> usingCacheLoader = CacheBuilder.newBuilder()
.expireAfterWrite(2, TimeUnit.MINUTES)
.ticker(fakeTicker)
.build(new CacheLoader<Integer, String>() {
public String load(Integer keyName) throws Exception {
logger.info("Getting value for key: {}", keyName);
return getValue(keyName, "with_cache_loader");
}
});
private static Cache<Integer, String> withoutCacheLoader = CacheBuilder.newBuilder()
.expireAfterWrite(2, TimeUnit.MINUTES)
.ticker(fakeTicker)
.build();
ルイーにこれを確認していただきありがとうございます、私はそれを感謝します:) –