使用这个,我可以告诉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,它不是解释性的
发布于 2010-10-20 11:42:38
根据您正在做的事情,我认为默认情况下L2缓存只缓存ID调用的项,例如session.Get或session.Load。要使用ICriteria等缓存查询,您需要明确说明您希望缓存该查询。例如。
ICriteria criteria = Session.CreateCriteria( ).SetCacheable( true ).SetCacheRegion( "SomeNameHere" );这里的某个名称是您的缓存区域。简而言之,它将缓存项组合在一起,使它保持简洁,如果我通常只放入类/实体的名称,如"Person“或"Company”。
在设置类映射时,您可能总是希望使用基类中的Cache属性。大概是这样的
Cache.ReadWrite( ).IncludeAll( ) ;我个人发现,如果没有这一点,当执行查询时,它会缓存结果集中每个项目的ID,而不是项目本身,因此这将使繁重的查询变得快速,但它必须为每个项目命中数据库,所以如果您有一个真正简单的查询返回100个项目,那么您的数据库可能会被命中100次。我发现将上面的代码添加到我的映射类中就解决了这个问题。
希望这能有所帮助。
https://stackoverflow.com/questions/3955739
复制相似问题