首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Fluent NHibernate上设置SysCache?

如何在Fluent NHibernate上设置SysCache?
EN

Stack Overflow用户
提问于 2010-10-18 07:13:57
回答 1查看 3.3K关注 0票数 3

使用这个,我可以告诉Fluent NHibernate使用SysCache作为二级缓存提供程序:

代码语言:javascript
复制
MsSqlConfiguration.MsSql2008.ShowSql().ConnectionString(x =>
            {
                x.Server(@"localhost\ANDREPC");
                x.Database("mydb");
                x.TrustedConnection();
            }).Cache(c => c.ProviderClass<SysCacheProvider>().UseQueryCache())

此外,SysCache的配置必须放在Web.Config上:

代码语言:javascript
复制
<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,它不是解释性的

EN

回答 1

Stack Overflow用户

发布于 2010-10-20 11:42:38

根据您正在做的事情,我认为默认情况下L2缓存只缓存ID调用的项,例如session.Get或session.Load。要使用ICriteria等缓存查询,您需要明确说明您希望缓存该查询。例如。

代码语言:javascript
复制
ICriteria criteria = Session.CreateCriteria( ).SetCacheable( true ).SetCacheRegion( "SomeNameHere" );

这里的某个名称是您的缓存区域。简而言之,它将缓存项组合在一起,使它保持简洁,如果我通常只放入类/实体的名称,如"Person“或"Company”。

在设置类映射时,您可能总是希望使用基类中的Cache属性。大概是这样的

代码语言:javascript
复制
Cache.ReadWrite( ).IncludeAll( ) ;

我个人发现,如果没有这一点,当执行查询时,它会缓存结果集中每个项目的ID,而不是项目本身,因此这将使繁重的查询变得快速,但它必须为每个项目命中数据库,所以如果您有一个真正简单的查询返回100个项目,那么您的数据库可能会被命中100次。我发现将上面的代码添加到我的映射类中就解决了这个问题。

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3955739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档