NHibernate は、.NET 用の一般的なオブジェクト リレーショナル マッピング (ORM) ソリューションです。また、データベースとデータ ストレージが原因でアプリケーションがパフォーマンスとスケーラビリティのボトルネックに直面する高トランザクション環境でよく使用されます。
これに対処するために、Hibernate は 1 種類のキャッシュ、First Level Cache (2st Level Cache) と Second Level Cache (XNUMXnd Level Cache) を提供します。第 XNUMX レベル キャッシュは組み込みでユーザーの「セッション オブジェクト」に関連付けられていますが、第 XNUMX レベル キャッシュはプラグイン可能なアーキテクチャを提供し、「セッション ファクター」レベル (アプリケーション レベルを意味します) に関連付けられています。これは、キャッシュがユーザー セッションの出入りの影響を受けないことを意味します。サードパーティのキャッシュを Hibernate Second Level Cache としてプラグインできます。
NCache は、.NET アプリケーション用の非常に高速で線形にスケーラブルな分散キャッシュです。 NCache キャッシュ サーバーを追加して、より大きなトランザクション負荷を処理できるようになります。プラグインできます NCache NHibernateの第XNUMXレベルのキャッシュとして。
NHibernate Second Level Cache プロバイダー アーキテクチャの一部として、 NCache 実装済み ICacheProvider
& ICacheinterfaces
。 その結果、設定できるようになります NCache プログラミングを必要とせず、設定ファイルを変更するだけで NHibernate の 2 番目のレベル キャッシュとして使用できます。
単に変更するだけです app.config
と指定します NCache 2次キャッシュプロバイダーとして設定し、そのプロパティを追加します。また、app.config で NHibernate の 2 番目のレベルのキャッシュとその他のサブ キャッシュを有効にします。以下にその例を示します app.config
変更点:
<hibernate-configurationxmlns="urn:nhibernate-configuration-2.2">
...
<session-factory>
...
<property name="cache.provider_class">
Alachisoft.NCache.Integrations.NHibernate.Cache.NCacheProvider,
Alachisoft.NCache.Integrations.NHibernate.Cache
</property>
<property name="cache.use_second_level_cache">
true
</property>
...
</session-factory>
</hibernate-configuration>
<appSettings>
<add key="ncache.application_id"
value="myapp" />
</appSettings>
NCache オブジェクトをキャッシュするための独自のプロパティを使用して、各 NHibernate 領域を個別に設定できます。この目的のために NCache という名前の設定ファイルがあります NCacheNHibernate.xml
、これには、NHibernate Second Level Cache によって使用されるすべての領域設定が含まれます。以下はその構成ファイルのサンプルです。
<configuration>
<application-config application-id="myapp"
enable-cache-exception="true"
default-region-name="default"
key-case-sensitivity="false">
<cache-regions>
<region name="default"
cache-name="mycache"
priority="default"
expiration-type="none"
expiration-period="0" />
<region name="AbsoluteExpirationRegion"
cache-name="myRegioncache"
priority="Default"
expiration-type="sliding"
expiration-period="180" />
</cache-regions>
...
</application-config>
</configuration>
NCache は .NET 用の強力な分散キャッシュであり、多くの豊富な機能を提供します。これらの機能の 1 つは、キャッシュがデータベースの変更を追跡し、データベース内の対応するデータが変更された場合にキャッシュされた項目を無効にするか再ロードするデータベース同期です。
NHibernateセカンドレベルキャッシュプロバイダーを設定できます NCache データベース同期を使用します。 変更するだけ NCacheNHibernate.xml
次のような構成ファイル:
<configuration>
<application-config application-id="myapp"
enable-cache-exception="true"
default-region-name="default"
key-case-sensitivity="false">
...
<database-dependencies>
<dependency entity-name="nhibernator.BLL.Customer"
type="sql"
sql-statement="SELECT ContactName FROM dbo.Customers
WHERE CustomerID =?"
cache-key-format="depdency.customer:[pk]"/>
</database-dependencies>
</application-config>
</configuration>
Hibernate は、クエリの結果を 2 番目のレベルのキャッシュにキャッシュするクエリ キャッシュの機能を提供します。 NHibernate Query Cache を有効にできます。 app.config
次のような構成ファイル:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
...
<session-factory>
...
<property name="cache.use_query_cache">
true
</property>
...
</session-factory>
</hibernate-configuration>
クエリは、結果セットの主キーとともに、という名前のデフォルトのクエリ領域に保存されます。 NHibernate.Cache.StandardQueryCache
。ただし、クエリの結果として取得されたオブジェクトは、それぞれの領域にキャッシュされます。さらに、クエリ キャッシュを有効にしても、デフォルトでは各クエリはキャッシュされません。代わりに、次のようにコード内で各クエリをキャッシュ可能として設定する必要があります。
IQuery qry = session.CreateQuery("from Customer c").SetCacheable(true);
NHibernate アプリケーションがマルチサーバー環境で実行されている場合は、次のような分散キャッシュが必要です。 NCache 次の理由により、NHibernate の 2 次キャッシュ プロバイダーとして機能します。