2017-03-24 17 views
1

은, 우리가 NHibernate에 유창하게 구성된 SysCacheProvider 활성화 두 번째 수준 및 쿼리 캐시, 모두로 구성있어 쿼리 캐시에서 결과를 캐시하지 엔티티 매핑 파일에 Cache.ReadOnly()으로 표시된 Lookup이라는 엔티티가 있고 CreateCriteriaSetCacheable(true).SetCacheMode(CacheMode.Normal)을 사용하여 가져옵니다.NHibernate에 두 번째 레벨 캐시</p> <pre><code>.Cache(x => x.UseQueryCache().ProviderClass<SysCacheProvider>().UseSecondLevelCache()) </code></pre> <p>우리가 우리의 응용 프로그램 구성에서

문제는 두 번째 레벨 캐시가 사용되지 않는 것입니다. NHprof를 사용하면 (고유 한 문자열 ID로) 조회를 가져 오는 첫 번째 쿼리가 올바르게 캐시 된 것을 볼 수 있지만 NHibernate는 모든 호출에서 두 번째 테이블을 사용하는 대신 캐시 된 SQL ID로 행을 반입하기 위해 데이터베이스로 이동합니다 레벨 캐시.

나는 모든 것을했습니다 in this blog하지만 아무 소용이 없습니다.

내가해야 할 일이 있습니까, 아니면 엔티티가 2 차 캐시에 추가되지 않을 수 있다는 함정이 있습니까?

답변

1

거래를 사용하고 있습니까?

대답이 아니오이면 2 차 수준 캐시를 포기하거나 트랜잭션을 사용하십시오. 유효한 데이터 만 캐시하도록 보장하기 위해 트랜잭션을 사용하지 않고 데이터를 수정하면 캐시 종류가 비활성화됩니다.

트랜잭션을 사용하지 않고 캐시를 사용하려는 일반적인 함정은 here입니다. This도 확인합니다. 또 다른 이유는 이것일 수 있습니다. one, 더 까다 롭습니다.

+0

이것은 우리 문제는 아니지만 염두에 두어야 할 사항이므로 올바른 것으로 표시해 두겠습니다. – GoatInTheMachine