3

我一直在研究使用 fluent 和 syscache2 的 WCF 服务。关于我目前的困境,我几乎阅读了所有关于 SO 的文章;我没有运气。

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

流畅的配置:

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

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 文件设置如下:

<configSections>
  <section name="syscache" type="NHibernate.Caches.SysCache2.SysCacheSection, NHibernate.Caches.SysCache2"/>
</configSections>

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

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

有人对想法有什么建议吗?

谢谢

4

1 回答 1

4

我一直使用这个没有问题:

.ExposeConfiguration (cfg => {
    cfg.Properties.Add ("expiration", "900");
})

不确定 Properties.Add 的行为是否与您正在使用的 SetProperty 调用有任何不同。

似乎如果您使用的是较新版本的 NHibernate,您也可以依靠 NHibernate.Cfg 命名空间中的新扩展方法(这将替换您的整个 .Cache 流利调用)

.ExposeConfiguration (cfg => {
    cfg.SessionFactory().Caching.Through<SysCacheProvider>().WithDefaultExpiration(900);
})

做一些阅读我发现了这个

cache.default_expiration 或 expire (Int32):因为 NH Contrib 2.1 cache.default_expiration 是新的设置名称,应该使用它而不是 expire 来指定缓存项必须失效的秒数。默认值为 300 秒。仍然支持旧名称以实现向后兼容性。

所以属性名称可能不是你的问题(现在想知道我使用的“过期”键是否也可能特定于 memcache 提供程序,尽管它似乎适用于 syscache)。

于 2012-07-31T12:41:27.680 回答