0

Hibernate の第 2 レベル キャッシュを賢く使用することで、アプリケーションのパフォーマンスが向上すると信じており、そのためにインターネットと Hibernate コースで学習を開始しました。第 2 レベルのキャッシュと基本的にその仕組みについてはかなり良い説明がありますが、私の目標は、見つけられなかった特定の質問から始めて、物事がどのように機能するかを正確に理解することです。したがって、Hibernate のキャッシュ全般についていくつか質問します。特に第 2 レベルのキャッシュでは。

回答に関する注意事項:

A. 明らかな質問や無関係な質問であっても、お答えいただければ幸いです。
B. 質問がキャッシュ プロバイダーに依存する場合は、Ehcache に関する回答を聞きたいです

質問:

  1. 第 2 レベルのキャッシュを構成すると、第 1 レベルのキャッシュは無効になりますか? そうでない場合、エンティティを取得しようとしたときにイベントのプロセスがどのように発生するか、どのキャッシュ レベルが最初にヒットするか?

  2. クエリ キャッシュは、クエリ テキストを HQL またはネイティブ SQL として保存しますか?

  3. 第 2 レベルのキャッシュは、JPA を介した Hibernate と直接 Hibernate を使用して同じように機能しますか?

  4. クエリキャッシュにあるIDで第2レベルキャッシュをヒットすることにより、クエリキャッシュが第2レベルキャッシュに参加することを理解しました。何らかの理由で ID の一部が第 2 レベルのキャッシュに存在しなくなった場合、すべてのエンティティが再度フェッチされるか、存在しない部分だけがフェッチされるのでしょうか?

  5. 同期について – 特定のトランザクションで、第 2 レベル キャッシュに格納されているエンティティを更新することにより – 第 2 レベル キャッシュでエンティティが更新されるのはいつですか? この行為が第 2 レベルのキャッシュとクエリ キャッシュの両方にどのように影響するか について、さらに詳しく説明します。


    ありがとうございました!

4

2 に答える 2

1
  1. いいえ。一次キャッシュは引き続き使用されます。唯一の違いは、エンティティがデータベースではなく第 2 レベル キャッシュから取得される可能性があることと、データベースに加えて第 2 レベル キャッシュに保存されることです。

  2. Criteria クエリもキャッシュできるため、HQL ほどではありません。SQLが使われていると思います。しかし、キャッシュする必要があるのはこれだけではありません。クエリのパラメーターもキャッシュされます。ただし、それについては気にする必要はありません。キャッシュはクエリをキャッシュし、同じクエリを2回実行するとキャッシュにヒットし、キャッシュされていないクエリを実行してもヒットしない限り、キャッシュが使用するものは何でも構いません。

  3. はい。

  4. キャッシュにないもののみ、AFAIK。テストして、実行される SQL クエリを確認します。

  5. これは、キャッシュの同時実行戦略とキャッシュの機能によって異なります。第 2 レベルのキャッシュは、主に、エンティティが読み取り専用、またはほとんど読み取り専用である場合に役立ちます。

于 2013-08-24T15:48:14.987 に答える
0

さらにいくつかの詳細:

[4]。クエリ キャッシュは、更新タイムスタンプ キャッシュと連携して機能します。エンティティ タイプのインスタンスが挿入/削除/更新されると、そのエンティティ タイプのすべてのクエリが無効になります。そのため、いずれかのエンティティがなくなった場合、そのエンティティ タイプのすべてのクエリが無効になるため、クエリが再実行されます。クエリ キャッシュはこのように機能します。Hibernate が特定のインスタンスがいずれかのクエリに触れているかどうかを判断するにはコストがかかりすぎるため、安全ではあるが最適ではないアプローチが必要になります。したがって、クエリ キャッシュは、ほとんどが読み取り専用のシナリオでのみパフォーマンスの向上をもたらす可能性があります。

[5]。通常、2 番目のレベルのキャッシュは、トランザクションの afterCompletion() トランザクション同期コールバックで更新されます。

于 2013-08-27T08:43:53.970 に答える