標籤:c style a color get strong
緩衝的範圍?
1.事務範圍
事務範圍的緩衝只能被當前事務訪問,每個事務都有各自的緩衝,緩衝內的資料通常採用相互關聯的對象形式.緩衝的生命週期依賴於事務的生命週期,只有當事務結束時,緩衝的生命週期才會結束.事務範圍的緩衝使用記憶體作為儲存介質,一級緩衝就屬於事務範圍.
2.應用範圍
應用程式的緩衝可以被應用範圍內的所有事務共用訪問.緩衝的生命週期依賴於應用的生命週期,只有當應用結束時,緩衝的生命週期才會結束.應用範圍的緩衝可以使用記憶體或硬碟作為儲存介質,二級緩衝就屬於應用範圍.
3.叢集範圍
在叢集環境中,緩衝被一個機器或多個機器的進程共用,緩衝中的資料被複製到叢集環境中的每個進程節點,進程間通過遠程通訊來保證緩衝中的資料的一致,緩衝中的資料通常採用對象的鬆散資料形式.
-------------------------------------------------------------------
Session緩衝就是一級緩衝.是事務範圍的緩衝
SessionFactory的緩衝分為內建緩衝和外置緩衝.內建緩衝中存放的是SessionFactory對象的一些集合屬性包含的資料(映射元素據及預定義SQL語句等),對於應用程式來說,它是唯讀.外置緩衝中存放的是資料庫資料的副本,其作用和一級緩衝類似.二級緩衝除了以記憶體作為儲存介質外,還可以選用硬碟等外部存放裝置
注意事項:
1.Session 層級的緩衝,它同session邦定。它的生命週期和session相同。Session消毀,它也同時消毀;管理一級緩衝,一級緩衝無法取消,用兩個方法管理,clear(),evict()
2.兩個session 不能共用一級緩衝,因它會伴隨session的生命週期的建立和消毀;
3.Session緩衝是實體層級的緩衝,就是只有在查詢對象層級的時候才使用,如果使用HQL和SQL是查詢屬性層級的,是不使用一級緩衝的!切記!!!!
4. 理解Get()和Load()在一級緩衝中的區別
使用ISession.Get()方法立即把對象執行個體儲存到緩衝中,
使用ISession.Load()方法僅僅先載入實體的Id。
當需要使用除了實體的Id以外的屬性的時候再訪問資料庫把這個執行個體儲存在緩衝中。
-------------------------------------------------------------------------------------
NHibernate一級緩衝管理
NHibernate為我們預設提供了一級緩衝,那麼我們想顯式地去管理ISession緩衝,怎麼辦呢?ISession介面為我們提供了一些方法來顯式管理一級緩衝。
ISession.Evict(object):從該session緩衝中刪除指定執行個體。
ISession.Clear():清空該Session中所有緩衝。
ISession.Contains(object):檢查緩衝中是否包含指定執行個體。