標籤:style blog class code c color
系列文章
[Nhibernate]體繫結構
[NHibernate]ISessionFactory配置
[NHibernate]持久化類(Persistent Classes)
[NHibernate]O/R Mapping基礎
[NHibernate]集合類(Collections)映射
[NHibernate]關聯映射
[NHibernate]Parent/Child
什麼是NHibernate.Caches?
NHibernate.Caches是NHibernate的附加軟體,它是Kevin Williams(aka k-dub)貢獻的。緩衝是一個儲存實體的地點(在首次載入時);一旦進入緩衝,能夠取得它們,而無需(再次)查詢的背景儲存(資料庫)。這意味著它們能更快的載入(或重新載入)。
NHibernate session有一個內部的(一級)緩衝,存放著它的實體。這些緩衝沒有共用,因此session被銷毀時它的緩衝也被銷毀了。NHibernate提供了二級緩衝系統;它在SessionFactory層級工作。因此它被同一個SessionFactory產生的session共用。
使用每個請求(request)一個session模式,很多Session可以並發的訪問同一個實體,而不用每次都訪問資料庫,因此效能獲得了提升。
貢獻者使得在NHibernate中使用不同的緩衝提供者成為可能:
- NHibernate.Caches.Prevalence使得使用底層的Bamboo.Prevalence實現作為緩衝提供者成為可能。開啟檔案Bamboo.Prevalence.license.txt可以看到它的許可資訊,你也可以訪問它的網站。
- NHibernate.Caches.SysCache使得底層的System.Web.Caching.Cache實現作為緩衝提供者成為可能。這意味著你可以依賴ASP.NET的緩衝特性來理解它是怎麼工作的。要得到更多的資訊,可以閱讀CachingApplicationData(MSDN)
如何使用?
這裡是在NHibernate中啟用二級緩衝的步驟:
- 選擇需要使用的緩衝提供者並且拷貝它的程式集到你的程式集路徑(NHibernate.Caches.Prevalence.dll或者NHibernate.Caches.SysCache.dll)
- 為了表明使用哪種緩衝提供者,在NHibernate設定檔中(可以在YourAssembly.exe.config或者web.config或者.cfg.xml檔案)添加如下內容:
1 <add key="hibernate.cache.provider_class" value="XXX" />(1)2 <add key="relativeExpiration" value="120" />(2)
(1)"xxx"可以是"NHibernate.Caches.Prevalence.PrevalenceCacheProvider,NHibernate.Caches.Prevalence"或者"NHibernate.Caches.SysCache.SysCacheProvider,NHibernate.Caches.SysCache"。
(2)relativeExpiration的值是你希望緩衝每個實體的秒數(這裡是兩分鐘)。
添加<cache usage="read-write|nonstrict-read-write|read-only"/>(在<class>後面)到你需要緩衝的實體映射中,它也為集合(bag,list,map,set,.....)提供支援。
注意:緩衝不會知道另一個進程儲存的實體的變化(儘管配置了快取資料的到期時間)。當緩衝被建立在SessionFactory層級,它們會和SessionFactory執行個體一起被銷毀,所以必須在你需要緩衝的時候,保持SessionFactory存在。
總結
本文主要講了如何在nhibernate中使用緩衝。有個需要注意的地方:
緩衝不會知道另一個進程儲存的實體的變化(儘管配置了快取資料的到期時間)。當緩衝被建立在SessionFactory層級,它們會和SessionFactory執行個體一起被銷毀,所以必須在你需要緩衝的時候,保持SessionFactory存在。
例子在後續文章中提供,這裡只是學習文檔內容。
本文來自《NHibernate 中文文檔》