首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fluent NHibernate Syscache2缓存过期

Fluent NHibernate Syscache2缓存过期
EN

Stack Overflow用户
提问于 2012-07-31 06:32:11
回答 1查看 2.9K关注 0票数 3

我一直在做一个使用fluent和syscache2的WCF服务。我几乎阅读了关于我目前困境的每一篇文章;我没有运气。

我正在尝试为我的二级缓存设置过期时间。我设置的任何值似乎都会被忽略,默认值5分钟用于使缓存过期。

流畅的配置:

注意: contextClass只是一个描述符类,用于保存传递给配置的值。

代码语言:javascript
复制
var cfg = Fluently.Configure()
                .Database(
                    MsSqlConfiguration.MsSql2008                        
                    .ConnectionString(c => c.Is(connectionString))
                    .ShowSql()
                    )
                .Diagnostics(d => d.Enable())                                                             
                .Cache(c => c                                 
                            .UseQueryCache()          
                            .ProviderClass(typeof(NHibernate.Caches.SysCache2.SysCacheProvider).AssemblyQualifiedName))                    
                .Mappings(m => m
                    .FluentMappings
                    .AddFromAssembly(assembly)) 
                .ExposeConfiguration(x =>
                {
                    x.SetProperty(NHibernate.Cfg.Environment.CurrentSessionContextClass, contextClass.Id);
                    x.SetProperty(NHibernate.Cfg.Environment.PrepareSql, contextClass.PrepareSql); //set prepare_sql true/false
                    x.SetProperty(NHibernate.Cfg.Environment.CacheDefaultExpiration, contextClass.ExpireL2Cache); //set default expiration in seconds
                });

我还按如下方式设置了app.config文件:

代码语言:javascript
复制
<configSections>
  <section name="syscache" type="NHibernate.Caches.SysCache2.SysCacheSection, NHibernate.Caches.SysCache2"/>
</configSections>

<syscache>
  <cache expiration="600" priority="5" />
</syscache>

app.config有一个变体,它有一个使用区域的syscache部分,但也不能工作。

有没有人有什么建议?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-31 20:41:28

我总是毫无问题地使用它:

代码语言:javascript
复制
.ExposeConfiguration (cfg => {
    cfg.Properties.Add ("expiration", "900");
})

不过,我不确定Properties.Add的行为是否与您正在使用的SetProperty调用有什么不同。

看起来,如果您使用的是较新版本的NHibernate,您也可以依赖NHibernate.Cfg名称空间中的新扩展方法(这将替换您在fluent中的整个.Cache调用)。

代码语言:javascript
复制
.ExposeConfiguration (cfg => {
    cfg.SessionFactory().Caching.Through<SysCacheProvider>().WithDefaultExpiration(900);
})

在阅读时,我发现了this

cache.default_expiration or expiration (Int32):由于NH Contrib 2.1 cache.default_expiration是新的设置名称,应使用该名称而不是expiration来指定缓存项必须失效的秒数。默认值为300秒。为了向后兼容,仍然支持旧名称。

因此,属性名称可能不是您的问题(现在我想知道我使用的"expiration“键是否也是特定于memcache提供程序的,尽管它似乎适用于syscache)。

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

https://stackoverflow.com/questions/11730671

复制
相关文章

相似问题

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