2

Webアプリケーションにキャッシュを実装することを計画しています。

以前のWebアプリケーションの1つでHibernateEHCacheをすでに使用しました。

最近、最近のSpringリリースにキャッシュ抽象化レイヤーがあることを知りました。

したがって、Hibernate EHCacheの単なるラッパーであるか、Spring自体によって提供されるキャッシュ機能である必要があります。

異なる場合は、キャッシュを使用するのに最適またはより良いオプションを知りたいですか?

また、いくつかの記事から、HibernateEHCacheがクラスタリングをサポートしていないことがわかりました。大きなWebアプリケーションにはクラスタリングが必要だからです。

WebアプリケーションでSpring3.1とHibernate3.3を使用しました。

4

3 に答える 3

3

Hibernate と EHCache は別物です。

EHCache はキャッシュ プロバイダー、つまりキャッシュの実際の実装です。

Hibernate は、EHCache を含む L2 キャッシュに複数の異なるプロバイダーを使用できます。

Spring Cache は、メソッド呼び出しをキャッシュするためのフレームワークです。 EHCache を含む複数の異なるプロバイダーを使用できます。

EHCache は、基本的な JMS 駆動の同期から Terracotta BigMemory 配布まで、いくつかのモードで配布 (クラスタリング) を提供します。Hibernate L2 キャッシュはクラスタリングをサポートする必要があります。

Spring Cache は Hibernate とは関係ありませんが、Hibernate L2 キャッシュと Spring Cache (メソッド キャッシュ) を EHCache と並行して、両方の基盤となるプロバイダーとして使用できます。

于 2013-01-16T15:38:22.080 に答える
0

Hibernate キャッシングは、EhCache (または別のキャッシング プロバイダー) を使用して Spring で引き続き機能します。em.find(key) エンティティと関係 (@Cache アノテーションまたは XML) を格納するための第 2 レベルのキャッシュと、q.setHint("org.hibernate.cacheable",true) の場合のクエリ キャッシュを提供します。これらは統合され、十分に文書化されています。これにはスプリングキャッシングは必要ありません。

ただし、Spring は Hibernate キャッシングとは独立したメソッド キャッシングを提供し、キャッシング プロバイダーとして EhCache を引き続き使用できます (EhCache を Hibernate と共有します)。EhCache 構成が重複しているため、これは少し混乱する可能性がありますが、基本的に、Spring Caching を使用すると、@Cacheable としてマークされたメソッドの結果を個別にキャッシュできます。

注 1: Spring/Method キャッシングは Hibernate と統合されていません。メソッドキャッシングでキャッシュされた結果は、Hibernate によって認識または維持されません。

注 2: Hibernate Query キャッシングは、キャッシングの使用方法を十分に理解していない高度に分散されたシステムにはお勧めできません。キャッシュされたクエリ結果をいつ削除する必要があるかを追跡するために Hibernate が維持する共有エンティティ タイムスタンプ キャッシュを使用するため、デッドロックのリスクが高まります。

于 2016-09-15T15:57:18.880 に答える