2

キャッシング レイヤーに Spring + Ehcache を使用しています。(プロキシ経由)

「findAll」の結果と「findById」の結果の両方を同じキャッシュにキャッシュしてから、特定のアイテムと「findAll」の結果を CacheEvict (アイテムの残りの部分はそのままにしておきます) と更新時にロードして戻すことができるかどうか疑問に思っています。 「findById」が再び発生したときにキャッシュしますか?

(または別の方法として、findAll と findById を 2 つのキャッシュに保持し、更新時に findAll キャッシュと findById キャッシュの特定のアイテムの CacheEvict allEntries を保持する方法があります)。

これは可能ですか?

4

1 に答える 1

5

とクエリ キャッシュがどのように機能するかを説明します。まず第一に、Hibernate はすべての単一エンティティ (たとえばfindById、操作のタイプごとに取得) をいわゆる二次キャッシュにキャッシュします。

findAllこれを使用してすべてのエンティティを取得すると、すべてのエンティティの主キーがクエリ キャッシュ (1 つのキーの下) に配置され、すべての具体的なエンティティが 2 番目のレベルのキャッシュに配置されます。再度呼び出すfindAllと、まずクエリ キャッシュからすべての主キーを取得し、次に 2 次キャッシュ (またはデータベース) からすべてのエンティティを取得します。

無効化はかなり単純です。操作はクエリ キャッシュ全体を無効にする必要がありINSERTますが、 s は透過的です。DELETEfindAllUPDATE

これにより、ソリューションにこれを実装する方法が案内されます。これは Spring で可能ですが、特にクエリ キャッシュから第 2 レベル キャッシュへの部分マッピングなど、少しコーディングする必要がある場合があります。

于 2012-05-17T07:40:03.317 に答える