1

これは自分で発見するのは簡単なことのように思えますが、ここにいます。

ベースのGuava Cache Interfaceには、次のことしかありませんcleanUp()

void cleanUp()
キャッシュに必要な保留中のメンテナンス操作を実行します。正確にどのアクティビティが実行されるか (もしあれば) は、実装に依存します。

そしてCacheBuilder()こう言います。

expireAfterWrite または expireAfterAccess が要求された場合、キャッシュの変更ごと、時折のキャッシュ アクセス時、または Cache.cleanUp() の呼び出し時に、エントリが削除される可能性があります。期限切れのエントリは Cache.size() によってカウントされる場合がありますが、読み取りまたは書き込み操作で表示されることはありません。

weakKeys、weakValues、または softValues が要求された場合、キャッシュに存在するキーまたは値がガベージ コレクターによって回収される可能性があります。再利用されたキーまたは値を含むエントリは、キャッシュの変更ごと、不定期のキャッシュ アクセス時、または Cache.cleanUp(); の呼び出し時にキャッシュから削除される場合があります。そのようなエントリは Cache.size() でカウントされる場合がありますが、読み取りまたは書き込み操作からは決して見えません。

特定のキャッシュ構成では、定期的なメンテナンス タスクが発生します。このタスクは、書き込み操作中に実行されるか、書き込みがない場合の不定期の読み取り操作中に実行されます。返されたキャッシュの Cache.cleanUp() メソッドもメンテナンスを実行しますが、スループットの高いキャッシュではそれを呼び出す必要はありません。定期的なメンテナンスを実行するのは、removalListener、expireAfterWrite、expireAfterAccess、weakKeys、weakValues、または softValues で構築されたキャッシュのみです。

したがって、 cleanUp は何もしない場合もあれば、何もしない場合もあり、呼び出されることでメリットがある場合とない場合があります。しかし、私が知る限り、LocalCache.cleanUp()メソッドは何かを行いますが、私は何に従っていないだけです。大まかに言えば、LoadingCache で cleanup() を呼び出す必要があるのはいつですか?

.load()注: Guava 18 で CacheBuilderを呼び出したときにデバッガーがインスタンス化されるとデバッガーが言うため、 cleanUp の LocalCache 参照にリンクしました。

具体的には、私の使用例は、標準のデータベース バック ロード キャッシュです。一部のデータベース レコードが変更または削除され、有効期限が十分に速くない場合に、特定のキャッシュをワイプする機能を公開するように依頼されました。私たちは高速で汚れたアプローチを採用し、疑わしいキャッシュを でクリアできるようにしましたinvalidateAll()cleanUp()後で電話するべきですか?なぜですか、そうでないのですか?

4

0 に答える 0