使用这个,我可以告诉Fluent NHibernate使用SysCache作为二级缓存提供者:
MsSqlConfiguration.MsSql2008.ShowSql().ConnectionString(x =>
{
x.Server(@"localhost\ANDREPC");
x.Database("mydb");
x.TrustedConnection();
}).Cache(c => c.ProviderClass<SysCacheProvider>().UseQueryCache())
此外,SysCache的配置必须放在Web上.Config:
<configuration>
<configSections>
<section name="syscache" type="NHibernate.Caches.SysCache.SysCacheSectionHandler,NHibernate.Caches.SysCache" />
</configSections>
<syscache>
<cache region="foo" expiration="500" priority="4" />
<cache region="bar" expiration="300" priority="3" />
</syscache>
</configuration>
现在怎样?这些地区意味着什么?如何将区域与类型相关联?我该如何使它工作?我的jMeter测试认为,在我的应用程序上面的配置比以前慢了7%之后......我需要了解SysCache并学习如何继续配置。
感谢。
PS:官方的SysCache文档是here,它不是解释性的
答案 0 :(得分:3)
根据您的操作,默认情况下,我认为L2缓存只缓存ID,E.G.调用的项目。 session.Get或session.Load。要使用ICriteria等缓存查询,您需要明确地说要缓存该查询。 E.G。
ICriteria criteria = Session.CreateCriteria( ).SetCacheable( true ).SetCacheRegion( "SomeNameHere" );
这里的一些名称是你的缓存区域。简而言之,这些组合在一起缓存项目,保持这一点真的很简单我通常只是把类/实体的名称,如“人”或“公司”。
设置类映射时,您可能始终希望使用基类中的Cache属性。它的类似
Cache.ReadWrite( ).IncludeAll( ) ;
我个人发现,如果没有这个,当执行查询时,它会缓存结果集中每个项目的ID而不是项目本身,因此这会使得查询速度很快,但是它必须为每个项目执行数据库item,所以如果你有一个非常简单的查询返回100个项目,那么你的数据库可能会被击中100次。我发现将上面的内容添加到我的映射类中解决了这个问题。
希望这有帮助。