具體解釋Hibernate中的二級緩衝

來源:互聯網
上載者:User

標籤:1.5.0   硬碟   width   分析   第三方   repeat   gets   應用   collect   

  

 1.前言

這篇部落格再前幾篇部落格的基礎上來解說一下。Hibernate中的二級緩衝。二級緩衝是屬於SessionFactory層級的緩衝機制。

第一層級的緩衝是Session層級的緩衝,是屬於事務範圍的緩衝,由Hibernate管理,一般無需進行幹預。第二層級的緩衝是SessionFactory層級的緩衝。是屬於進程範圍的緩衝。


 2.Hibernate二級緩衝

1.分類

二級緩衝也分為了兩種

內建緩衝:Hibernate內建的,不可卸載,通常在Hibernate的初始化階段,Hibernate會把映射中繼資料和提前定義的SQL語句放置到SessionFactory的緩衝中。該內建緩衝是僅僅讀的。

外置緩衝:通常說的二級緩衝也就是外置緩衝,在預設情況下SessionFactory不會啟用這個快取區外掛程式,外置緩衝中的資料是資料庫資料的複製,外置緩衝的物理介質能夠是記憶體或者硬碟。

hibernate二級緩衝的結構





2.並發訪問策略

transactional

(事務型)

僅在受管理的環境中適用

提供Repeatable Read交易隔離等級

適用常常被讀。非常少改動的資料

能夠防止髒讀和不可反覆讀的並發問題

緩衝支援事務,發生異常的時候。緩衝也可以復原

read-write

(讀寫型)

提供Read Committed交易隔離等級

在非叢集的環境中適用

適用常常被讀,非常少改動的資料

能夠防止髒讀

更新緩衝的時候會鎖定緩衝中的資料

nonstrict-read-write

(非嚴格讀寫型)

適用極少被改動,偶爾同意髒讀的資料(兩個事務同一時候改動資料的情況非常少見)

不保證緩衝和資料庫中資料的一致性

為快取資料設定非常短的到期時間,從而盡量避免髒讀

不鎖定緩衝中的資料

read-only

(僅僅讀型)

適用從來不會被改動的資料(如參考資料)

在此模式下,假設對資料進行更新操作,會有異常

交易隔離等級低,並發效能高

在叢集環境中也能完美運作


分析:通過上述表格分析例如以下

適合放入二級緩衝中資料

非常少被改動

不是非常重要的資料。同意出現偶爾的並發問題

不適合放入二級緩衝中的資料

常常被改動

財務資料,絕對不同意出現並發問題

與其它應用資料共用的資料


 3.二級緩衝的配置

1.hibernate支援的快取區外掛程式

?EHCache: 可作為進程範圍內的緩衝,存放資料的物理介質能夠是記憶體或硬碟,對Hibernate的查詢快取提供了支援
?OpenSymphony`:可作為進程範圍內的緩衝,存放資料的物理介質能夠是記憶體或硬碟,提供了豐富的快取資料到期策略,對Hibernate的查詢快取提供了支援
?SwarmCache:可作為叢集範圍內的緩衝,但不支援Hibernate的查詢快取
?JBossCache:可作為叢集範圍內的緩衝,支援Hibernate的查詢快取

四種快取區外掛程式支援的並發範圍策略例如以

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >


2.二級緩衝配置

以下以ehcache緩衝為例,來講一下二級緩衝的配置

2.1 拷貝jar包

如要第三方的jar包ehcache-1.5.0.jar,而且依賴於

依賴backport-util-concurrent 和 commons-logging

2.2 在hibernate.cfg.xml中開啟二級緩衝

<propertyname="hibernate.cache.use_second_level_cache">true</property>

2.3 配置二級緩衝技術供應商

<propertyname="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

2.4 配置快取資料對象並發策略

方式一 在hbm檔案裡配置

<span style="font-family:SimSun;font-size:18px;"><class name="cn.itcast.domain.Customer" table="customers" catalog="hibernate3day4" ><!-- 類層級緩衝 --><cache usage="read-write"/><set name="orders" cascade="all-delete-orphan" inverse="true" ><!-- 關聯集合層級緩衝 --><cache usage="read-write"/></set></class></span>


方式二 在cfg檔案配置(集中配置)


<span style="font-family:SimSun;font-size:18px;"><!-- 類層級緩衝 --><class-cache usage="read-write" class="cn.itcast.domain.Customer"/><class-cache usage="read-write" class="cn.itcast.domain.Order"/><!-- 集合緩衝 --><collection-cache usage="read-write" collection="cn.itcast.domain.Customer.orders"/></span>

2.5 加入二級緩衝設定檔

在src中配置ehcache.xml,將ehcache.jar包中的ehcache-failsafe.xml 改名 ehcache.xml 放入 src 

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">    <diskStore path="java.io.tmpdir"/> 配置二級緩衝硬碟暫時檔案夾位置  <defaultCache              maxElementsInMemory="10000" // 記憶體中最大對象數量 ,超過數量。資料會被緩衝到硬碟             eternal="false"            timeToIdleSeconds="120" // 是否緩衝為永久性 false 不永久            timeToLiveSeconds="120" // 存活時間。對象無論是否使用,到了時間回收            overflowToDisk="true" // 能否夠緩衝到硬碟            maxElementsOnDisk="10000000" // 硬碟緩衝最大對象數量             // 當jvm結束時是否持久化對象 true false 預設是false            diskExpiryThreadIntervalSeconds="120"  // 指定專門用於清除到期對象的監聽線程的輪詢時間             memoryStoreEvictionPolicy="LRU"             /></ehcache>



 4.Demo測試二級緩衝

@Testpublic void fun1() {Session s1 = HibernateUtils.getSession();s1.beginTransaction();Customer c1 = (Customer) s1.get(Customer.class, 1); // 從資料庫中載入資料System.out.println(c1.getName());//此時才會發出SQL語句s1.getTransaction().commit();s1.close(); // 關閉session層級的一級緩衝Session s2 = HibernateUtils.getSession();s2.beginTransaction();Customer c2 = (Customer) s2.get(Customer.class, 1); // 由於有了二級緩衝的存在,直接從二級緩衝中取出就可以System.out.println(c2.getName());Customer c3 = (Customer) s2.get(Customer.class, 1); //從二級緩衝中取出System.out.println(c3.getName());s2.getTransaction().commit();s2.close();}



具體解釋Hibernate中的二級緩衝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.