Caching
 

キャッシング - Hibernateのキャッシュ



gbvy[W

Hibernateキャッシュカテゴリー:
セッションキャッシュ、キャッシュを消去します。
SessionFactoryのキャッシュは内部キャッシュおよび外部キャッシュに分割されています。内蔵キャッシュのSessionFactoryオブジェクトのコレクションプロパティに格納されているデータ(地図データやSQL文などの事前定義された要素)を、アプリケーションの場合、それは読み取り専用ですが一部含まれています。外部キャッシュデータは、データベース、その役割とキャッシュ同様のコピーに格納されている。 、また、ハードドライブなどの外部ストレージデバイスを使用することができますに加えて、記憶媒体として二次キャッシュメモリ。




Hibernateのキャッシュと二次キャッシュは、永続化層に配置されて配置されているデータはデータベースのコピーを格納するために使用され、最大の違いは、キャッシュの範囲は同じではありません。
キャッシュの範囲は次の3つのカテゴリに分かれています:
1。サービスの範囲は
キャッシュへのアクセスのサービス範囲は、現在のトランザクションすることができ、各トランザクションは、独自のキャッシュを、通常、相互にフォームのデータオブジェクトのキャッシュがあります。キャッシュのライフサイクルは、トランザクションのライフサイクルに依存する場合にのみ、トランザクションのライフサイクルが終了するキャッシュの終わりを示します。記憶媒体は、トランザクションスコープに属しているキャッシュとしてメモリを使用して、トランザクションのキャッシュのスコープです。
2。アプリケーション


キャッシュは、リモートから各プロセスノードは、プロセス間通信キャッシュ内の一貫性のあるデータは、キャッシュデータを確実にするためにクラスタ環境にコピーされ、クラスタ化環境では、キャッシュはデータを共有する過程でマシンが複数のマシンです多くのばらばらなオブジェクトの形式でデータを使用されています。
Hibernateのキャッシュ管理
レベルのキャッシュ管理:

永続オブジェクトの削除すべてのクリア()がキャッシュされますと、そのメモリリソースのリリースでは、占有
指定されたオブジェクトがキャッシュ内に存在するかどうか(オブジェクトobj)は判断が含まれています。
バッファの内容を更新する()フラッシュように、データベースと同期してデータを
番目のレベルのキャッシュ管理:
リソースはオブジェクトが占有して離すと、二次キャッシュから削除永続オブジェクトのクラスのIDを指定するには、(クラスarg0が、Serializableをarg1に)退去。

sessionFactory.evict(Customer.class, new Integer(1)); sessionFactory.evict(Customer.class, new Integer(1));

Javaコード
sessionFactory.evict(Customer.class); sessionFactory.evict(Customer.class);
evictCollectionは、(文字列arg0)二次キャッシュ、メモリリソースの占領のリリースから削除指定されたコレクション内のすべての永続オブジェクトのクラスを指定します。
Javaコード
sessionFactory.evictCollection("Customer.orders"); sessionFactory.evictCollection("Customer.orders");

まず、すべてのデータは、2次キャッシュ上のデータの種類が二次キャッシュに収まるようにものを見て適していますか?二次キャッシュにはどのようなデータの種類に合わせしないのですか?
ここでは二次キャッシュの負荷に適合しないいくつかの状況があります:
1。データを頻繁に変更
2。絶対にデータへの同時アクセスを許可していません
3。他のアプリケーションとデータを共有するには


2。時折、非クリティカルなデータの同時実行の問題をできるようにするには
3。データへの同時アクセスのではないでしょう
4。定数データ
5。データを変更するには、サードパーティのではないでしょう
Hibernateの第2レベルキャッシュの機能はこれらのプラグインを統合するために、Hibernate、2次キャッシュを実現するためのプラグインで構成され、Hibernateはorg.hibernate.cache.CacheProviderの口実を提供するには、アダプタのプラグとHibernateの間のバッファとして動作します。
一般的なプラグインの二次キャッシュを使用して
EHCache org.hibernate.cache.EhCacheProvider
OSCache org.hibernate.cache.OSCacheProvider
SwarmCahe org.hibernate.cache.SwarmCacheProvider
JBossCache org.hibernate.cache.TreeCacheProvider
簡単なehcacheの構成
hibernate.cfg.xml
XMLコード
<hibernate-configuration>
<session-factory>

<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>

<property name="hibernate.cache.use_query_cache">
true
</property>
</session-factory>
</hibernate-configuration> <hibernate-configuration>
<session-factory>

<property name="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>

<property name="hibernate.cache.use_query_cache">
true
</property>
</session-factory>
</hibernate-configuration>
ehcache.xml
XMLコード
<ehcache>

<diskStore path="java.io.tmpdir"/>
<defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/>
</ehcache> <ehcache>

<diskStore path="java.io.tmpdir"/>
<defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/>
</ehcache>
****.hbm.xml
XMLコード
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"" >
<hibernate-mapping>
<class>

<cache usage="read-write"/>
</class>
</hibernate-mapping>