hibernateが2番目のレベルのキャッシュにヒットするタイミングと、キャッシュが無効になるタイミングを理解できません。
これは私が現在理解していることです:
- 2次キャッシュはセッション間のエンティティを保存します。スコープはSessionFactoryです
- キャッシュするエンティティを指定する必要があります。デフォルトでは、エンティティはキャッシュされません。
- クエリキャッシュは、クエリの結果をキャッシュに保存します。
わからないのは
- 休止状態はいつこのキャッシュにヒットしますか?
- 2番目のレベルのキャッシュを設定したが、クエリのキャッシュは設定していないとしましょう。顧客をキャッシュしたいのですが、50000あります。どのようにしてキャッシュから顧客を取得できますか?
- キャッシュからIDで取得できると思います。それは簡単ですが、キャッシュする価値もありません。しかし、もし私がすべての顧客と何らかの計算をしたいとしたらどうでしょう。顧客のリストを表示したい場合、どうすれば顧客にアクセスできますか?
- クエリキャッシュが無効になっている場合、どのようにすればすべての顧客を獲得できますか?
- 誰かが顧客の1人を更新するとどうなりますか?
- その顧客はキャッシュで無効になりますか、それともすべての顧客が無効になりますか?
それともキャッシュが完全に間違っていると思いますか?その場合、2次キャッシュのより適切な使用法は何でしょうか?hibernateのドキュメントでは、キャッシュが実際にどのように機能するかはまったく明確ではありません。それをセットアップする方法についての指示だけがあります。
更新: したがって、2番目のレベルのキャッシュ(クエリキャッシュなし)がIDでデータをロードするのに適していることを理解するようになりました。たとえば、Webアプリケーションのすべてのリクエストでパーミッションをチェックしたいユーザーオブジェクトがあります。これは、2次キャッシュにユーザーをキャッシュすることでデータベースアクセスを削減する良い例でしょうか?セッションまたはどこにでもユーザーIDを格納するように、アクセス許可を確認する必要がある場合は、IDでユーザーを読み込み、アクセス許可を確認します。