第8章 NHibernate緩衝(NHibernate.Caches)
目錄
-
如何使用?
什麼是 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的緩衝特性來理解它是怎麼工作的。要得到更多的資訊,可以閱讀Caching Application Data(在NSDN上)。
如何使用?
這裡是在NHibernate中啟用二級緩衝的步驟:
選擇需要使用的緩衝提供者並且拷貝它的程式集到你的程式集路徑(NHibernate.Caches.Prevalence.dll 或者NHibernate.Caches.SysCache.dll).
為了表明使用哪種緩衝提供者,在NHibernate設定檔中(可以在YourAssembly.exe.config或者web.config或者.cfg.xml 檔案)添加下面的內容:
<add key="hibernate.cache.provider_class" value="XXX" />(1)<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存在.