3

流暢で 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>

リージョンを使用する syscache セクションを持つ app.config のバリアントがありましたが、それも機能しませんでした。

アイデアに関する提案はありますか?

ありがとう

4

1 に答える 1

4

私はいつもこれを問題なく使用してきました:

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

ただし、使用している SetProperty 呼び出しと Properties.Add の動作が異なるかどうかはわかりません。

新しいバージョンの NHibernate を使用している場合は、これについても NHibernate.Cfg 名前空間の新しい拡張メソッドを利用できるようです (これにより、流暢な .Cache 呼び出し全体が置き換えられます)。

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

いくつかの読書をして、私はこれを見つけまし:

cache.default_expiration または有効期限 (Int32): NH Contrib 2.1 以降、 cache.default_expiration は新しい設定名で、有効期限の代わりに使用して、キャッシュ アイテムを無効にするまでの秒数を指定します。デフォルト値は 300 秒です。古い名前は、下位互換性のために引き続きサポートされています。

したがって、プロパティ名はおそらくあなたの問題ではありません(syscacheで動作するように見えましたが、使用した「有効期限」キーがmemcacheプロバイダーにも固有のものであったかどうか疑問に思っています)。

于 2012-07-31T12:41:27.680 に答える