Hibernate快取機制

2021-09-01 09:04:15 字數 3211 閱讀 6917

hibernate快取機制

一、快取

快取是位於應用程式與物理資料來源之間,用於臨時存放複製資料的記憶體區域,目的是為了減少應用程式對物理資料來源訪問的次數,從而提高應用程式的執行效能. 

hibernate在查詢資料時,首先到快取中去查詢,如果找到就直接使用,找不到的時候就會從物理資料來源中檢索,所以,把頻繁使用的資料載入到快取區後,就可以大大減少應用程式對物理資料來源的訪問,使得程式的執行效能明顯的提公升. 

二、hibernate快取分類 

1).session快取,一級快取. 

sessionfactory的快取分為內建快取和外接快取.內建快取中存放的是sessionfactory物件的一些集合屬性包含的資料(對映元素據及預定義sql語句等),對於應用程式來說,它是唯讀的.外接快取中存放的是資料庫資料的副本,其作用和一級快取類似.二級快取除了以記憶體作為儲存介質外,還可以選用硬碟等外部儲存裝置. 

2).hibernate的快取範圍 

hibernate的一級快取和二級快取都位於均位於持久層,且均用於存放資料庫資料的副本,最大的區別就是快取的範圍各不一樣. 

3)快取的範圍分為3類: 

1.事務範圍 

事務範圍的快取只能被當前事務訪問,每個事務都有各自的快取,快取內的資料通常採用相互關聯的物件形式.快取的生命週期依賴於事務的生命週期,只有當事務結束時,快取的生命週期才會結束.事務範圍的快取使用記憶體作為儲存介質,一級快取就屬於事務範圍. 

2.應用範圍 

應用程式的快取可以被應用範圍內的所有事務共享訪問.快取的生命週期依賴於應用的生命週期,只有當應用結束時,快取的生命週期才會結束.應用範圍的快取可以使用記憶體或硬碟作為儲存介質,二級快取就屬於應用範圍. 

3.集群範圍 

在集群環境中,快取被乙個機器或多個機器的程序共享,快取中的資料被複製到集群環境中的每個程序節點,程序間通過遠端通訊來保證快取中的資料的一致,快取中的資料通常採用物件的鬆散資料形式. 

三、hibernate的快取管理 

1).一級快取的管理: 

evit(object obj)  將指定的持久化物件從一級快取中清除,釋放物件所占用的記憶體資源,指定物件從持久化狀態變為脫管狀態,從而成為游離物件. 

clear()  將一級快取中的所有持久化物件清除,釋放其占用的記憶體資源 

contains(object obj) 判斷指定的物件是否存在於一級快取中. 

flush() 重新整理一級快取區的內容,使之與資料庫資料保持同步. 

2).二級快取的管理:

evict(class arg0, serializable arg1)  將某個類的指定id的持久化物件從二級快取中清除,釋放物件所占用的資源. 

sessionfactory.evict(customer.class, new integer(1));  

evict(class arg0)  將指定類的所有持久化物件從二級快取中清除,釋放其占用的記憶體資源. 

sessionfactory.evict(customer.class); 

evictcollection(string arg0)  將指定類的所有持久化物件的指定集合從二級快取中清除,釋放其占用的記憶體資源. 

sessionfactory.evictcollection("customer.orders");  

3).hibernate的二級快取的配置 

首先,不是所有的資料都適合放在二級快取中,看一下,什麼樣的資料適合放在二級快取中來?什麼樣的資料不適合放在二級快取中來? 

下面這幾種情況就不適合載入到二級快取中: 

1.經常被修改的資料 

2.絕對不允許出現併發訪問的資料 

3.與其他應用共享的資料 

下面這己種情況合適載入到二級快取中: 

1.資料更新頻率低 

2.允許偶爾出現併發問題的非重要資料 

3.不會被併發訪問的資料 

4.常量資料 

5.不會被第三方修改的資料 

四、常用的二級快取外掛程式

hibernate的二級快取功能是靠配置二級快取外掛程式來實現的,hibernate為了整合這些外掛程式,hibernate提供了org.hibernate.cache.cacheprovider藉口,它充當快取外掛程式與hibernate之間的介面卡 . 

常用的二級快取外掛程式 

ehcache  org.hibernate.cache.ehcacheprovider 

oscache  org.hibernate.cache.oscacheprovider 

swarmcahe  org.hibernate.cache.swarmcacheprovider 

jbosscache  org.hibernate.cache.treecacheprovider 

簡單介紹一下ehcache的配置 

hibernate.cfg.xml  

org.hibernate.cache.ehcacheprovider

true

ehcache.xml  

****.hbm.xml

<?xml version="1.0" encoding='utf-8'?>

五、持久化層的快取的併發訪問策略

當多個併發的事務同時訪問持久化層的快取的相同資料時,會引起併發問題,必須採用必要的事務隔離措施。 在程序範圍或集群範圍的快取,即第二級快取,會出現併發問題。因此可以設定以下四種型別的併發訪問策略,每一種策略對應一種事務隔離級別。

1)事務型(transactional)策略

僅僅在受管理環境中適用。它提供了repeatable read事務隔離級別。對於經常被讀但很少修改的資料,可以採用這種隔離型別,因為它可以防止髒讀和不可重複讀這類的併發問題。

2)讀寫型(read-write)策略

提供了read committed事務隔離級別。僅僅在非集群的環境中適用。對於經常被讀但很少修改的資料,可以採用這種隔離型別,因為它可以防止髒讀這類的併發問題。

3)非嚴格讀寫型(nonstrict-read-write)策略

不保證快取與資料庫中資料的一致性。如果存在兩個事務同時訪問快取中相同資料的可能,必須為該資料配置乙個很短的資料過期時間,從而盡量避免髒讀。對於極少被修改,並且允許偶爾髒讀的資料,可以採用這種併發訪問策略。

4)唯讀型策略(read-only)

對於從來不會修改的資料,如參考資料,可以使用這種併發訪問策略。 事務型併發訪問策略是事務隔離級別最高,唯讀型的隔離級別最低。事務隔離級別越高,併發效能就越低。

hibernate快取機制

hibernate的快取機制 首先引入快取的目的 hibernate 在查詢資料時,首先到快取中去查詢,如果找到就直接使用,找不到的時候就會從物理資料來源中檢索,所以,把頻繁使用的資料載入到快取區後,就可以大大減少應用程式對物理資料來源的訪問,使得程式的執行效能明顯的提公升.什麼是快取 快取是位於應...

Hibernate快取機制

hibernate快取分類 session快取,一級快取.sessionfactory的快取分為內建快取和外接快取.內建快取中存放的是sessionfactory物件的一些集合屬性包含的資料 對映元素據及預定義sql語句等 對於應用程式來說,它是唯讀的.外接快取中存放的是資料庫資料的副本,其作用和一...

Hibernate快取機制

快取是位於應用程式與物理資料來源之間,用於臨時存放複製資料的記憶體區域,目的是為了減少應用程式對物理資料來源訪問的次數,從而提高應用程式的執行效能.hibernate在查詢資料時,首先到快取中去查詢,如果找到就直接使用,找不到的時候就會從物理資料來源中檢索,所以,把頻繁使用的資料載入到快取區後,就可...