2017-01-13 2 views
1

この問題は、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(); 

答えて

1

getまたはgetUncheckedを呼び出すと、決してnullが返されないことは事実です。

有効期限は、パフォーマンスに関して - 特定のキーを取得するのにかかる時間とそれを新しく計算する必要があるかどうかと、実際に得られる値が古くなった情報を反映しているかどうか。

+0

ルイーにこれを確認していただきありがとうございます、私はそれを感謝します:) –

関連する問題