Ehcache が Hibernate の第 2 レベルのキャッシュとして使用できることを知りました。
しかし、最初のレベルのキャッシュとは何ですか? その用途は何ですか?第 1 レベルのキャッシュは第 2 レベルのキャッシュと通信しますか? 2 レベルのシステムでデータをキャッシュするとどうなるかを誰かが正確に説明できますか?
ありがとうございました。
Hibernate の第 1 レベルのキャッシュは、Hibernate セッション内にあります。寿命が短く、Hibernate セッションと同じ数の第 1 レベルのキャッシュがあります。通常、Web アプリケーションでのユーザー要求ごとに 1 つのセッション。
第 1 レベルのキャッシュには、セッションで使用されるすべてのオブジェクトが含まれ、基になる DB にまだ永続化されていないダーティ オブジェクトも含まれます。セッションをフラッシュすると、第 1 レベルのキャッシュ内のすべてのダーティ オブジェクトが第 2 レベルのキャッシュに伝播され、データベースに保存されます。
DB とセッション内のすべての第 1 レベル キャッシュの間のキャッシュとして機能する第 2 レベルのキャッシュは 1 つだけです。したがって、誰かが DB からオブジェクトをロードすると、そのオブジェクトは 2 番目のレベルのキャッシュに保持されます。そうすれば、他の誰かが同じオブジェクトをロードするとき、それは DB からではなく、2 番目のレベルのキャッシュから取得されます。オブジェクトは、キャッシュ削除ポリシーに応じて、不要になるまで第 2 レベルのキャッシュに保持されます。
誰かがオブジェクトを変更して DB にフラッシュすると、オブジェクトは 2 番目のキャッシュでも変更されます。ユーザーはすでに第 1 レベルのキャッシュに同じオブジェクトを持っており、それを変更してフラッシュしようとすると、例外が発生します。