2010-10-17 59 views
3

利用這一點,我可以告訴功能NHibernate使用SysCache作爲二級緩存提供:如何在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,它不是說明性

回答

3

取決於你在做什麼,在默認情況下,我認爲二級緩存僅緩存項目由ID需要時,例如session.Get或session.Load。要使用ICriteria等緩存查詢,您需要特別說明您希望緩存該查詢。例如。

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

這裏的一些名稱是您的緩存區域。簡而言之,這將緩存項目組合在一起,保持這一點非常簡單,我通常只是輸入類別/實體的名稱,如「Person」或「Company」。

設置類映射時,您可能總是希望使用基類的Cache屬性。它像

Cache.ReadWrite().IncludeAll() ; 

我個人認爲,如果沒有這個,當被執行的查詢其緩存的每個項目的ID在結果而不是項目本身,所以這將使一個沉重的查詢速度快,但隨後必須擊中每個項目的數據庫,所以如果你有一個非常簡單的查詢返回100個項目,那麼你的數據庫可能會被擊中100次。我發現將上面的代碼添加到我的映射類中解決了這個問題。

希望有幫助。

相關問題