gpt4 book ai didi

c# - 如何在 Fluent NHibernate 上设置 SysCache?

转载 作者:行者123 更新时间:2023-11-30 16:32:35 26 4
gpt4 key购买 nike

使用它,我可以告诉 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而且这不是解释性的

最佳答案

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

ICriteria criteria = Session.CreateCriteria( ).SetCacheable( true ).SetCacheRegion( "SomeNameHere" );

这里的 some 名称是您的缓存区域。简而言之,这会将缓存项组合在一起,为了保持简洁,我通常只输入类/实体的名称,例如“Person”或“Company”。

在设置类映射时,您可能总是希望使用基类的 Cache 属性。有点像

Cache.ReadWrite( ).IncludeAll( ) ;

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

希望对您有所帮助。

关于c# - 如何在 Fluent NHibernate 上设置 SysCache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3955739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com