NHibernate는 .NET용으로 널리 사용되는 ORM(객체 관계형 매핑) 솔루션입니다. 또한 데이터베이스 및 데이터 스토리지로 인해 애플리케이션이 성능 및 확장성 병목 현상에 직면하는 트랜잭션이 많은 환경에서 자주 사용됩니다.
이를 처리하기 위해 NHibernate는 First Level Cache(1st Level Cache)와 Second Level Cache(2nd Level Cache)의 두 가지 유형의 캐싱을 제공합니다. 첫 번째 수준 캐시는 내장되어 사용자의 "세션 개체"에 연결되어 있는 반면, 두 번째 수준 캐시는 플러그형 아키텍처를 제공하고 "세션 요소" 수준(애플리케이션 수준을 의미)에 연결되어 있습니다. 이는 캐시가 들어오고 나가는 사용자 세션의 영향을 받지 않는다는 것을 의미합니다. NHibernate Second Level Cache로 타사 캐시를 플러그인할 수 있습니다.
NCache .NET 애플리케이션을 위한 매우 빠르고 선형적으로 확장 가능한 분산 캐시입니다. NCache 더 많은 캐시 서버를 추가하여 더 많은 트랜잭션 로드를 처리할 수 있습니다. 꽂을 수 있어요 NCache Hibernate 두 번째 레벨 캐시로.
NHibernate Second Level Cache 제공자 아키텍처의 일부로서, NCache 구현했다 ICacheProvider
과 ICacheinterfaces
. 결과적으로 다음을 구성할 수 있습니다. NCache 프로그래밍 없이 간단히 구성 파일 변경을 통해 NHibernate 두 번째 수준 캐시로 사용됩니다.
당신은 단순히 app.config
지정 NCache 두 번째 수준 캐시 공급자로 지정하고 이에 대한 속성을 추가합니다. 또한 app.config에서 NHibernate의 두 번째 수준 캐싱 및 기타 하위 캐시를 활성화합니다. 다음은 예입니다. 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 두 번째 수준 캐시에서 사용되는 모든 지역 구성이 포함되어 있습니다. 다음은 해당 구성 파일의 샘플입니다.
<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을 위한 강력한 분산 캐시이며 다양한 풍부한 기능을 제공합니다. 이러한 기능 중 하나는 캐시가 데이터베이스 변경 사항을 추적하고 데이터베이스에서 해당 데이터가 변경되면 캐시된 항목을 무효화하거나 다시 로드하는 데이터베이스 동기화입니다.
다음을 위해 NHibernate Second Level Cache 제공자를 구성할 수 있습니다. 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>
NHibernate는 쿼리 결과를 두 번째 수준 캐시에 캐시하는 쿼리 캐싱 기능을 제공합니다. NHibernate 쿼리 캐시를 활성화할 수 있습니다. 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 다음과 같은 이유로 Hibernate 두 번째 수준 캐시 공급자로 사용됩니다.