當前位置:首頁 » 文件管理 » hibernate配置二級緩存

hibernate配置二級緩存

發布時間: 2022-11-30 12:00:54

❶ hibernate二級緩存有哪些方法

二級緩存是獨立於Hibernate的軟體部件,屬於第三方的產品,多個廠商和組織都提供有緩存產品,例如,EHCache和OSCache等等。在Hibernate中使用二級緩存,首先就要在hibernate.cfg.xml配置文件中配置使用哪個廠家的緩存產品,接著需要配置該緩存產品自己的配置文件,最後要配置Hibernate中的哪些實體對象要納入到二級緩存的管理中。明白了二級緩存原理和有了這個思路後,很容易配置起Hibernate的二級緩存。擴展知識:一個SessionFactory可以關聯一個二級緩存,也即一個二級緩存只能負責緩存一個資料庫中的數據,當使用Hibernate 的二級緩存後,注意不要有其他的應用或SessionFactory來更改當前資料庫中的數據,這樣緩存的數據就會與資料庫中的實際數據不一致。

❷ hibernate緩存機制的二級緩存

Hibernate提供了兩級緩存,第一級是Session的緩存。由於Session對象的生命周期通常對應一個資料庫事務或者一個應用事務,因此它的緩存是事務范圍的緩存。第一級緩存是必需的,不允許而且事實上也無法卸除。在第一級緩存中,持久化類的每個實例都具有唯一的OID。
第二級緩存是一個可插拔的的緩存插件,它是由SessionFactory負責管理。由於SessionFactory對象的生命周期和應用程序的整個過程對應,因此第二級緩存是進程范圍或者集群范圍的緩存。這個緩存中存放的對象的鬆散數據。第二級對象有可能出現並發問題,因此需要採用適當的並發訪問策略,該策略為被緩存的數據提供了事務隔離級別。緩存適配器用於把具體的緩存實現軟體與Hibernate集成。第二級緩存是可選的,可以在每個類或每個集合的粒度上配置第二級緩存。 適合存放到第二級緩存中的數據
1 很少被修改的數據
2 不是很重要的數據,允許出現偶爾並發的數據
3 不會被並發訪問的數據
4 參考數據
不適合存放到第二級緩存的數據
1 經常被修改的數據
2 財務數據,絕對不允許出現並發
3 與其他應用共享的數據。 1) 條件查詢的時候,總是發出一條select * from table_name where …. (選擇所有欄位)這樣的SQL語句查詢資料庫,一次獲得所有的數據對象。
2) 把獲得的所有數據對象根據ID放入到第二級緩存中。
3) 當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,如果配置了二級緩存,那麼從二級緩存中查;查不到,再查詢資料庫,把結果按照ID放入到緩存。
4) 刪除、更新、增加數據的時候,同時更新緩存。
Hibernate的二級緩存策略,是針對於ID查詢的緩存策略,對於條件查詢則毫無作用。為此,Hibernate提供了針對條件查詢的Query緩存。
Hibernate的Query緩存策略的過程如下:
1) Hibernate首先根據這些信息組成一個Query Key,Query Key包括條件查詢的請求一般信息:SQL, SQL需要的參數,記錄范圍(起始位置rowStart,最大記錄個數maxRows),等。
2) Hibernate根據這個Query Key到Query緩存中查找對應的結果列表。如果存在,那麼返回這個結果列表;如果不存在,查詢資料庫,獲取結果列表,把整個結果列表根據Query Key放入到Query緩存中。
3) Query Key中的SQL涉及到一些表名,如果這些表的任何數據發生修改、刪除、增加等操作,這些相關的Query Key都要從緩存中清空。

❸ Hibernate的一級緩存和二級緩存分別是什麼

1.Hibernate的緩存包括Session的緩存和SessionFactory的緩存,其中SessionFactory的緩存又可以分為兩類:內置緩存和外置緩存。Session的緩存是內置的,不能被卸載,也被稱為Hibernate的第一級緩存。

2.SessionFactory的內置緩存和Session的緩存在實現方式上比較相似,前者是SessionFactory對象的一些集合屬性包含的數據,後者是指Session的一些集合屬性包含的數據。SessionFactory的內置緩存中存放了映射元數據和預定義SQL語句,映射元數據是映射文件中數據的拷貝,而預定義SQL語句是在Hibernate初始化階段根據映射元數據推導出來,SessionFactory的內置緩存是只讀的,應用程序不能修改緩存中的映射元數據和預定義SQL語句,因此SessionFactory不需要進行內置緩存與映射文件的同步。

3.SessionFactory的外置緩存是一個可配置的插件。在默認情況下,SessionFactory不會啟用這個插件。外置緩存的數據是資料庫數據的拷貝,外置緩存的介質可以是內存或者硬碟。SessionFactory的外置緩存也被稱為Hibernate的第二級緩存

❹ 關於Hibernate二級緩存的問題

<property
name="hibernate.cache.use_second_level_cache">true</property>
<property
name="hibernate.cache.provider_class">org.hibernate.cache.ehcacheprovider</property>
前一句是打開二級緩存,後一句是啟用第三方緩存產品(可改變,上面eache是hibernate官方默認的第三方緩存產品)
緩存是否實用,要看你的需求,
如果你的系統,瀏覽的人數比較多,但是增刪的比較少,緩存的功勞非常大
如果你的系統即時性非常強,那麼緩存的命中率就比較低,同時更新數據時,hibernate需要額外提供資源維護緩存與數據的一致

❺ SSH中怎麼配置Hibernate的二級緩存

<prop key="hibernate.cache.use_query_cache">true</prop>
<prop
key="hibernate.cache.use_second_level_cache">
true
</prop>

這樣寫,再加上ehcache.xml的緩存文件:
<cache
name="com.model.Role" maxElementsInMemory="5"
eternal="false"
timeToIdleSeconds="100" timeToLiveSeconds="180"
overflowToDisk="false"
/>
這是一裡面的一條信息。

❻ 什麼事Hibernate二級緩存

只需要查一次資料庫,在次操作數據不用去查詢了,它會首先找緩存,看看有沒有,如果有就直接用,沒有的時候在去查!

❼ Hibernate二級緩存的作用是什麼

Hibernate中應用緩存:因為應用程序訪問資料庫,讀寫數據的代價非常高,而利用持久層的緩存可以減少應用程序與資料庫之間的交互,即把訪問過的數據保存到緩存中,應用程序再次訪問已經訪問過的數據,這些數據就可以從緩存中獲取,而不必再從資料庫中獲取。

同時如果資料庫中的數據被修改或者刪除,那麼是、該數據所對應的緩存數據,也會被同步修改或刪除,進而保持緩存數據的一致性。Hibernate的二級緩存由SessionFactory對象管理,是應用級別的緩存。它可以緩存整個應用的持久化對象,所以又稱為「SessionFactory緩存」。

Hibernate中提供了兩級Cache,第一級別的緩存是Session級別的緩存,它是屬於事務范圍的緩存。這一級別的緩存由hibernate管理的,一般情況下無需進行干預;第二級別的緩存是SessionFactory級別的緩存,它是屬於進程范圍或群集范圍的緩存。這一級別的緩存可以進行配置和更改,並且可以動態載入和卸載。 Hibernate還為查詢結果提供了一個查詢緩存,它依賴於第二級緩存。

❽ 配置hibernate二級緩存,有幾種方法

19.2.1. 緩存映射(Cache mappings)
類或者集合映射的「<cache>元素」可以有下列形式:

<cache
usage="transactional|read-write|nonstrict-read-write|read-only"
region="RegionName"
include="all|non-lazy"
/> usage(必須)說明了緩存的策略: transactional、 read-write、 nonstrict-read-write或 read-only。

region (可選, 默認為類或者集合的名字(class or collection role name)) 指定第二級緩存的區域名(name of the second level cache region)

include (可選,默認為 all) non-lazy 當屬性級延遲抓取打開時, 標記為lazy="true"的實體的屬性可能無法被緩存

另外(首選?), 你可以在hibernate.cfg.xml中指定<class-cache>和 <collection-cache> 元素。

這里的usage 屬性指明了緩存並發策略(cache concurrency strategy)。

19.2.2. 策略:只讀緩存(Strategy: read only)
如果你的應用程序只需讀取一個持久化類的實例,而無需對其修改, 那麼就可以對其進行只讀 緩存。這是最簡單,也是實用性最好的方法。甚至在集群中,它也能完美地運作。

<class name="eg.Immutable" mutable="false">
<cache usage="read-only"/>
....
</class>19.2.3. 策略:讀/寫緩存(Strategy: read/write)
如果應用程序需要更新數據,那麼使用讀/寫緩存 比較合適。 如果應用程序要求「序列化事務」的隔離級別(serializable transaction isolation level),那麼就決不能使用這種緩存策略。 如果在JTA環境中使用緩存,你必須指定hibernate.transaction.manager_lookup_class屬性的值, 通過它,Hibernate才能知道該應用程序中JTA的TransactionManager的具體策略。 在其它環境中,你必須保證在Session.close()、或Session.disconnect()調用前, 整個事務已經結束。 如果你想在集群環境中使用此策略,你必須保證底層的緩存實現支持鎖定(locking)。Hibernate內置的緩存策略並不支持鎖定功能。

<class name="eg.Cat" .... >
<cache usage="read-write"/>
....
<set name="kittens" ... >
<cache usage="read-write"/>
....
</set>
</class>

❾ 什麼是hibernate的二級緩存

在向大家詳細介紹Hibernate二級緩存之前,首先讓大家了解下一級緩存,然後全面介紹Hibernate二級緩存。

Hibernate中提供了兩級Cache,第一級別的緩存是Session級別的緩存,它是屬於事務范圍的緩存。這一級別的緩存由hibernate管理的,一般情況下無需進行干預;第二級別的緩存是SessionFactory級別的緩存,它是屬於進程范圍或群集范圍的緩存。這一級別的緩存可以進行配置和更改,並且可以動態載入和卸載。 Hibernate還為查詢結果提供了一個查詢緩存,它依賴於第二級緩存。

一. 一級緩存和二級緩存的比較:

第一級緩存 第二級緩存 存放數據的形式相互關聯的持久化對象 對象的散裝數據 緩存的范圍事務范圍,每個事務都有單獨的第一級緩存進程范圍或集群范圍,緩存被同一個進程或集群范圍內的所有事務共享並發訪問策略由於每個事務都擁有單獨的第一級緩存,不會出現並發問題,無需提供並發訪問策略由於多個事務會同時訪問第二級緩存中相同數據,因此必須提供適當的並發訪問策略,來保證特定的事務隔離級別數據過期策略沒有提供數據過期策略。處於一級緩存中的對象永遠不會過期,除非應用程序顯式清空緩存或者清除特定的對象必須提供數據過期策略,如基於內存的緩存中的對象的最大數目,允許對象處於緩存中的最長時間,以及允許對象處於緩存中的最長空閑時間物理存儲介質內存內存和硬碟。對象的散裝數據首先存放在基於內存的緩存中,當內存中對象的數目達到數據過期策略中指定上限時,就會把其餘的對象寫入基於硬碟的緩存中。緩存的軟體實現在Hibernate的Session的實現中包含了緩存的實現由第三方提供,Hibernate僅提供了緩存適配器(CacheProvider)。用於把特定的緩存插件集成到Hibernate中。啟用緩存的方式只要應用程序通過Session介面來執行保存、更新、刪除、載入和查詢資料庫數據的操作,Hibernate就會啟用第一級緩存,把資料庫中的數據以對象的形式拷貝到緩存中,對於批量更新和批量刪除操作,如果不希望啟用第一級緩存,可以繞過Hibernate API,直接通過JDBC API來執行指操作。用戶可以在單個類或類的單個集合的粒度上配置第二級緩存。如果類的實例被經常讀但很少被修改,就可以考慮使用第二級緩存。只有為某個類或集合配置了第二級緩存,Hibernate在運行時才會把它的實例加入到第二級緩存中。用戶管理緩存的方式第一級緩存的物理介質為內存,由於內存容量有限,必須通過恰當的檢索策略和檢索方式來限制載入對象的數目。Session的 evit()方法可以顯式清空緩存中特定對象,但這種方法不值得推薦。第二級緩存的物理介質可以是內存和硬碟,因此第二級緩存可以存放大量的數據,數據過期策略的maxElementsInMemory屬性值可以控制內存中的對象數目。管理第二級緩存主要包括兩個方面:選擇需要使用第二級緩存的持久類,設置合適的並發訪問策略:選擇緩存適配器,設置合適的數據過期策略。

二. 一級緩存的管理:

當應用程序調用Session的save()、update()、savaeOrUpdate()、get()或load(),以及調用查詢介面的 list()、iterate()或filter()方法時,如果在Session緩存中還不存在相應的對象,Hibernate就會把該對象加入到第一級緩存中。當清理緩存時,Hibernate會根據緩存中對象的狀態變化來同步更新資料庫。 Session為應用程序提供了兩個管理緩存的方法: evict(Object obj):從緩存中清除參數指定的持久化對象。 clear():清空緩存中所有持久化對象。

三. Hibernate二級緩存的管理:

1. Hibernate二級緩存策略的一般過程如下:
1) 條件查詢的時候,總是發出一條select * from table_name where …. (選擇所有欄位)這樣的SQL語句查詢資料庫,一次獲得所有的數據對象。
2) 把獲得的所有數據對象根據ID放入到第二級緩存中。
3) 當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,如果配置了二級緩存,那麼從二級緩存中查;查不到,再查詢資料庫,把結果按照ID放入到緩存。
4) 刪除、更新、增加數據的時候,同時更新緩存。
Hibernate二級緩存策略,是針對於ID查詢的緩存策略,對於條件查詢則毫無作用。為此,Hibernate提供了針對條件查詢的Query Cache。

2. 什麼樣的數據適合存放到第二級緩存中?
1) 很少被修改的數據
2) 不是很重要的數據,允許出現偶爾並發的數據
3) 不會被並發訪問的數據
4) 參考數據,指的是供應用參考的常量數據,它的實例數目有限,它的實例會被許多其他類的實例引用,實例極少或者從來不會被修改。

3. 不適合存放到第二級緩存的數據?
1) 經常被修改的數據
2) 財務數據,絕對不允許出現並發
3) 與其他應用共享的數據。

4. 常用的緩存插件 Hibernater二級緩存是一個插件,下面是幾種常用的緩存插件:
◆EhCache:可作為進程范圍的緩存,存放數據的物理介質可以是內存或硬碟,對Hibernate的查詢緩存提供了支持。
◆OSCache:可作為進程范圍的緩存,存放數據的物理介質可以是內存或硬碟,提供了豐富的緩存數據過期策略,對Hibernate的查詢緩存提供了支持。
◆SwarmCache:可作為群集范圍內的緩存,但不支持Hibernate的查詢緩存。
◆JBossCache:可作為群集范圍內的緩存,支持事務型並發訪問策略,對Hibernate的查詢緩存提供了支持。

5. 配置Hibernate二級緩存的主要步驟:
1) 選擇需要使用二級緩存的持久化類,設置它的命名緩存的並發訪問策略。這是最值得認真考慮的步驟。
2) 選擇合適的緩存插件,然後編輯該插件的配置文件。

熱點內容
ecshop如何清除緩存 發布:2023-01-29 10:20:24 瀏覽:992
杭州電保鏢的WiFi密碼是多少 發布:2023-01-29 10:17:21 瀏覽:612
和平精英蘋果手機如何轉安卓手機 發布:2023-01-29 10:17:08 瀏覽:542
filezilla創建ftp 發布:2023-01-29 10:14:24 瀏覽:340
資金賬戶密碼忘記了怎麼找回 發布:2023-01-29 10:14:09 瀏覽:831
新捷達自動擋低配有什麼配置 發布:2023-01-29 10:14:07 瀏覽:575
javajava大端 發布:2023-01-29 10:12:56 瀏覽:970
編程器參數 發布:2023-01-29 10:10:07 瀏覽:320
沒有存儲許可權 發布:2023-01-29 10:09:02 瀏覽:402
java如何json 發布:2023-01-29 10:00:19 瀏覽:687