1

私は Guava キャッシュ ホールドを使用しており、実行時間の長いデータベース クエリから収集した統計情報を定期的に更新しています。現時点で私が見ている問題は、呼び出し元が期限切れのキャッシュ値を取得できるようにするのではなく、すべてのスレッドが更新を待たなければならないことです。Guava キャッシュに古い読み取りを許可する方法はありますか?

キャッシュはそのように構築されます

 cache = CacheBuilder.<DateType, List<DataValueEventQuality>> newBuilder()
                .expireAfterWrite(cacheExpirySeconds, TimeUnit.SECONDS).build();

そして、私はキャッシュから取得しますcache.get(key, Callable)

4

2 に答える 2

1

これには間違った方法を使用しているようです。のドキュメントLoadingCacheから、次の2 つの方法があります。

void put(K key, V value)

このキャッシュ内のキーに値を関連付けます。キャッシュに以前にキーに関連付けられた値が含まれていた場合、古い値は値に置き換えられます。

これはアトミックであり、キャッシュは待機する必要があります。

void refresh(K key)

おそらく非同期で、キー key の新しい値を読み込みます。新しい値がロードされている間、以前の値 (存在する場合) は、削除されない限り、引き続き get(key) によって返されます。

使用しているキャッシュの種類やコードを表示していないため、LoadingCache. ただし、キャッシュを使用して値をリロードする必要があるためrefresh、古い値を読み取ることができます。

于 2013-07-26T09:53:39.900 に答える