NHibernate는 더 빠른 검색을 위해 쿼리 결과를 프로세스 외 캐시에 저장하는 2단계 캐시 개념을 오랫동안 지원해 왔습니다. 2단계 캐시는 NHContrib 프로젝트는 이러한 캐시를 소유하고 있으며, 여기에는 ASP.NET HttpCache, Velocity(AppFabric) 및 Memcached가 포함됩니다. 마지막 캐시인 Memcached는 .NET Couchbase 클라이언트 라이브러리가 의존하는 Enyim.Caching 라이브러리를 사용하여 구현됩니다. 이러한 종속성과 Couchbase가 당연히 Memcached와 호환된다는 사실을 고려할 때, NHibernate에 사용 가능한 2단계 캐시 세트에 Couchbase를 추가하는 것은 당연해 보였습니다.
방금 NHContrib Memcached 제공자를 Couchbase로 포팅하는 작업을 마쳤습니다. 새로운 Couchbase 캐시는 Couchbase Labs(http://github.com/couchbaselabs/nhibernate-caches-couchbase)에서 사용할 수 있습니다. 플러그 앤 플레이 방식이며 사용법을 시연할 수 있는 샘플 ASP.NET MVC 프로젝트가 함께 제공됩니다. 리포지토리의 README.md 파일에 자세한 설정이 나와 있지만, 여기서는 샘플 프로젝트 구성 중 일부를 소개하여 사용 방법을 알려드리겠습니다.
샘플에서는 다음을 사용합니다. FluentNHibernate 를 사용하여 구성할 수 있습니다. 여기서는 표준 XML 파일 세트 대신 코드에서 NHibernate를 구성할 수 있다는 것 외에는 FluentNHibernate에 대해 설명하지 않겠습니다. 샘플 프로젝트에는 클라이언트 구성을 위한 정적 메서드가 있는 정적 클래스가 있습니다.
{
public 정적 ISessionFactory 생성 세션 팩토리()
{
문자열 연결 문자열 = @"데이터 원본=.SQLEXPRESS;AttachDbFilename=|DataDirectory|Beers.mdf;통합 보안=정함;사용자 인스턴스=정함";
반환 유창하게.구성()
.데이터베이스(MsSqlConfiguration.MsSql2008.연결 문자열(연결 문자열))
<강한>.캐시(c => c.쿼리 캐시 사용().ProviderClass<카우치베이스 캐시 공급자>())강한>
.매핑(m =>m.플루언트매핑.어셈블리에서 추가<맥주>())
.ExposeConfiguration(c => c.SetProperty("현재_세션_컨텍스트_클래스", "웹"))
.빌드세션팩토리();
}
…
}
Couchbase 캐시 공급자와 관련된 줄은 유창한 .Cache 호출에 있으며, 여기서 NHibernate에 쿼리를 캐시하고 새로운 Couchbase 캐시 공급자를 사용하여 캐시하도록 지시하고 있습니다. 그 외에는 특별히 구성해야 하는 Couchbase 공급자는 없습니다. 그러나 2단계 캐시를 사용하는 데 필요한 몇 가지 다른 부분이 있습니다. 모델 클래스에서 캐싱을 활성화해야 합니다.
제 맥주 수업도 마찬가지입니다:
{
[필수]
public 가상 int Id { get; set; }
[필수]
public 가상 문자열 이름 { get; set; }
[필수]
public 가상 문자열 양조장 { get; set; }
[필수]
public 가상 float ABV { get; set; }
}
BeerMap에서 캐시 옵션을 설정해야 합니다.
{
public BeerMap()
{
표("맥주");
<강한> 캐시.읽기쓰기();
강한> Id(b => b.Id);
지도(b => b.이름).Not.Null 가능().길이(30);
지도(b => b.양조장).Not.Null 가능().길이(50);
지도(b => b.ABV).Not.Null 가능();
}
}
2단계 캐시 및 웹 프로젝트에서 염두에 두어야 할 사항입니다. 기본적으로 캐시는 세션 단위가 아닌 요청 단위로 저장됩니다. 설명된 대로 세션을 관리하도록 ASP.NET 애플리케이션을 구성해야 합니다. 여기. 이러한 방식으로 앱을 구성하지 않으면 동일한 세션 내에서도 모든 요청에 대해 캐시가 다시 생성되는 것을 확인할 수 있습니다.
따라서 빠르고 확장 가능한 2단계 캐싱 솔루션을 기다려왔다면 이제 NHibernate를 만나보세요.
이 공급자는 Couchbase Labs의 일부로 포함되어 있으며 공식적으로 지원되는 제품이 아니라는 점에 유의하세요. 이 코드는 Apache License 2.0에 따라 라이선스가 부여되었으므로 원하는 대로 자유롭게 사용할 수 있습니다. NHContrib에 있는 원본 프로젝트는 LGPL에 따라 라이선스가 부여됩니다.
Membase에서도 작동하나요?
네, 그렇습니다.
특정 엔티티 또는 쿼리에 대해 만료 기간을 더 길게 또는 더 짧게 조정하려면 캐시 영역을 어떻게 정의해야 하나요?