hibernate的二級緩衝

來源:互聯網
上載者:User

標籤:

  緩衝(Cache): 電腦領域非常通用的概念。它介於應用程式和永久性資料存放區源(如硬碟上的檔案或者資料庫)之間,其作用是降低應用程式直接讀寫永久性資料存放區源的頻率,從而提高應用的運行效能。緩衝中的資料是資料存放區源中資料的拷貝。緩衝的物理介質通常是記憶體;

  Hibernate中提供了兩個層級的緩衝

  第一層級的緩衝是 Session 層級的緩衝,它是屬於事務範圍的緩衝。這一層級的緩衝由 hibernate 管理的

  第二層級的緩衝是 SessionFactory 層級的緩衝,它是屬於進程範圍的緩衝

  SessionFactory 的緩衝可以分為兩類:

   內建緩衝: Hibernate 內建的, 不可卸載. 通常在 Hibernate 的初始化階段, Hibernate 會把映射中繼資料和預定義的 SQL 陳述式放到 SessionFactory 的緩衝中, 映射中繼資料是對應檔中資料(.hbm.xml 檔案中的資料)的複製. 該內建緩衝是唯讀.

   外置緩衝(二級緩衝): 一個可配置的快取區外掛程式. 在預設情況下, SessionFactory 不會啟用這個快取區外掛程式. 外置緩衝中的資料是資料庫資料的複製, 外置緩衝的物理介質可以是記憶體或硬碟

  適合放入二級緩衝中的資料: 很少被修改 不是很重要的資料, 允許出現偶爾的並發問題

  不適合放入二級緩衝中的資料: 經常被修改 財務資料, 絕對不允許出現並發問題 與其他應用程式共用的資料

1. 使用 Hibernate 二級緩衝的步驟:1). 加入二級快取區外掛程式的 jar 包及設定檔:I. 複製 \hibernate-release-4.2.4.Final\lib\optional\ehcache\*.jar 到當前 Hibrenate 應用的類路徑下.II. 複製 hibernate-release-4.2.4.Final\project\etc\ehcachexml 到當前 WEB 應用的類路徑下2). 配置 hibernate.cfg.xml I.   配置啟用 hibernate 的二級緩衝<property name="cache.use_second_level_cache">true</property>II.  配置hibernate二級緩衝使用的產品<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>III. 配置對哪些類使用 hibernate 的二級緩衝<class-cache usage="read-write" class="com.atguigu.hibernate.entities.Employee"/>        實際上也可以在 .hbm.xml 檔案中配置對哪些類使用二級緩衝, 及二級緩衝的策略是什麼. 2). 集合層級的二級緩衝的配置I. 配置對集合使用二級緩衝<collection-cache usage="read-write" collection="com.atguigu.hibernate.entities.Department.emps"/>也可以在 .hbm.xml 檔案中進行配置<set name="emps" table="GG_EMPLOYEE" inverse="true" lazy="true">    <cache usage="read-write"/>    <key>        <column name="DEPT_ID" />    </key>    <one-to-many class="com.atguigu.hibernate.entities.Employee" /></set>II. 注意: 還需要配置集合中的元素對應的持久化類也使用二級緩衝! 否則將會多出 n 條 SQL 陳述式. 3). ehcache 的 設定檔: ehcache.xml<ehcache>        <!--          指定一個目錄:當 EHCache 把資料寫到硬碟上時, 將把資料寫到這個目錄下.    -->         <diskStore path="d:\\tempDirectory"/>    <!--          設定緩衝的預設資料到期策略     -->        <defaultCache        maxElementsInMemory="10000"        eternal="false"        timeToIdleSeconds="120"        timeToLiveSeconds="120"        overflowToDisk="true"        />       <!--             設定具體的具名快取的資料到期策略。每個具名快取代表一個快取區域           快取區域(region):一個具有名稱的緩衝塊,可以給每一個緩衝塊設定不同的緩衝策略。           如果沒有設定任何的快取區域,則所有被緩衝的對象,都將使用預設的緩衝策略。即:<defaultCache.../>           Hibernate 在不同的快取區域儲存不同的類/集合。            對於類而言,地區的名稱是類名。如:com.atguigu.domain.Customer            對於集合而言,地區的名稱是類名加屬性名稱。如com.atguigu.domain.Customer.orders       -->       <!--             name: 設定緩衝的名字,它的取值為類的全限定名或類的集合的名字         maxElementsInMemory: 設定基於記憶體的緩衝中可存放的對象最大數目                 eternal: 設定對象是否為永久的, true表示永不到期,        此時將忽略timeToIdleSeconds 和 timeToLiveSeconds屬性; 預設值是false         timeToIdleSeconds:設定對象空閑最長時間,以秒為單位, 超過這個時間,對象到期。        當對象到期時,EHCache會把它從緩衝中清除。如果此值為0,表示對象可以無限期地處於空閑狀態。         timeToLiveSeconds:設定對象生存最長時間,超過這個時間,對象到期。        如果此值為0,表示對象可以無限期地存在於緩衝中. 該屬性值必須大於或等於 timeToIdleSeconds 屬性值                 overflowToDisk:設定基於記憶體的緩衝中的對象數目達到上限後,是否把溢出的對象寫到基於硬碟的緩衝中        -->    <cache name="com.atguigu.hibernate.entities.Employee"        maxElementsInMemory="1"        eternal="false"        timeToIdleSeconds="300"        timeToLiveSeconds="600"        overflowToDisk="true"        />    <cache name="com.atguigu.hibernate.entities.Department.emps"        maxElementsInMemory="1000"        eternal="true"        timeToIdleSeconds="0"        timeToLiveSeconds="0"        overflowToDisk="false"        /></ehcache>4).  查詢快取: 預設情況下, 設定的緩衝對 HQL 及 QBC 查詢時無效的, 但可以通過以下方式使其是有效I.  在 hibernate 設定檔中聲明開啟查詢快取<property name="cache.use_query_cache">true</property>II. 調用 Query 或 Criteria 的 setCacheable(true) 方法III. 查詢快取依賴於二級緩衝

 

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.