簡體   English   中英

NHibernate緩存:合理使用,最佳實踐?

[英]NHibernate Caches : Sensible Usage, best practices?

我使用Linq表達式查詢我的NHibernate數據源。 我遇到的問題是,在比較中,沒有兩個表達式的調用(或求值,對不起的詞匯不好)。 結果,NHibernate過於頻繁地以相同的參數執行相同的SQL。

我通過使用NHibernate緩存解決了這個問題,它的配置方式如下:

Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
                    .ConnectionString(c => c.Is(cStr))
                    .ShowSql())
                    .Mappings(x => x.FluentMappings.AddFromAssemblyOf<MyClassMap>())
                    .Cache(x=>x.UseQueryCache()
                               .ProviderClass("NHibernate.Cache.HashtableCacheProvider"))

稍后,我將照顧提供者,以便最終不會在生產中使用。 接下來,我所有的查詢都表示為可緩存:

session.Query<MyClass>().Cacheable().Where(filter).ToList();

據我已閱讀 ,高速緩存查詢發生在二級緩存,具有一個每SessionFactory的范圍。 另一方面,這意味着為了重新加載我的應用程序數據,我將不得不恢復SessionFactory的狀態,我認為這比對Session進行相同操作要昂貴得多。

是一種有效的方法來緩存查詢而不會弄亂SessionFactory(從字面上看,您不知道我的意思)嗎?

您可以清除第二級緩存(http://stackoverflow.com/questions/2660714/how-to-clear-the-entire-second-level-cache-in-nhibernate),而無需重新創建SessionFactory,但我不確定是否提供代碼也會清除緩存的查詢。 還有一些方法可以使用其API清除特定的提供程序。 但是據我所知,僅當您手動更改db中的數據時才需要手動清除緩存(不適用於NHibernate)。 如果您使用NH進行更改,它將更新緩存本身。 但是,如果您非常頻繁地更改查詢的數據,那么緩存將無濟於事,因為它必須經常更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM