それは実際にはアプリケーションのクエリモデルとトラフィックの需要に依存します。
- Redis / Hazelcastを使用すると、DBへのラウンドトリップがなくなるため、最高のパフォーマンスが得られる可能性がありますが、DBに正規化されたデータがあり、キャッシュに非正規化されたコピーがあり、キャッシュの更新に圧力がかかります。ポリシー。したがって、永続化されたデータが変更されるたびにキャッシュ更新を実装することを犠牲にして、最高のパフォーマンスを得ることができます。
- 第2レベルのキャッシュを使用するとセットアップが簡単になりますが、エンティティはIDでのみ保存されます。特定のクエリによって返されたIDを格納するクエリキャッシュもあります。したがって、第2レベルのキャッシュは2段階のプロセスであり、最高のパフォーマンスを得るには微調整する必要があります。射影クエリを実行する場合、第2レベルのオブジェクトキャッシュはエンティティのロードでのみ動作するため、役に立ちません。 2次キャッシュの主な利点は、データが変更されたとき、特にすべてのデータがHibernateによって永続化されている場合に、同期を維持しやすいことです。
したがって、究極のパフォーマンスが必要で、結果整合性ウィンドウを最小限に抑えるキャッシュ更新ロジックを実装してもかまわない場合は、外部キャッシュを使用してください。
エンティティをキャッシュする必要があるだけで(通常はそれほど頻繁には変更されません)、ほとんどの場合Hibernateエンティティの読み込みを介してエンティティにアクセスする場合は、第2レベルのキャッシュが役立ちます。