Hibernate的1級、2級Cache管理及EhCache的使用

Hibernate的1級、2級Cache管理及EhCache的使用

ID:40564065

大?。?4.13 KB

頁數(shù):5頁

時間:2019-08-04

Hibernate的1級、2級Cache管理及EhCache的使用_第1頁
Hibernate的1級、2級Cache管理及EhCache的使用_第2頁
Hibernate的1級、2級Cache管理及EhCache的使用_第3頁
Hibernate的1級、2級Cache管理及EhCache的使用_第4頁
Hibernate的1級、2級Cache管理及EhCache的使用_第5頁
資源描述:

《Hibernate的1級、2級Cache管理及EhCache的使用》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、Cache就是緩存,它往往是提高系統(tǒng)性能的最重要手段,對數(shù)據(jù)起到一個蓄水池和緩沖的作用。Cache對于大量依賴數(shù)據(jù)讀取操作的系統(tǒng)而言尤其重要。在大并發(fā)量的情況下,如果每次程序都需要向數(shù)據(jù)庫直接做查詢操作,它們所帶來的性能開銷顯而易見,頻繁的網(wǎng)絡傳輸、數(shù)據(jù)庫磁盤的讀寫操作都會大大降低系統(tǒng)的整體性能。此時,如果能把數(shù)據(jù)在本地內(nèi)存中保留一個鏡像,下次訪問時只需從內(nèi)存中直接獲取,那么顯然可以帶來顯著的性能提升。引入Cache機制的難點是如何保證內(nèi)存中數(shù)據(jù)的有效性,否則臟數(shù)據(jù)的出現(xiàn)將會給系統(tǒng)帶來難以預知的嚴重后果

2、。雖然一個設計得很好的應用程序不用Cache也可以表現(xiàn)出讓人接受的性能,但毫無疑問,一些對讀操作要求很高的應用程序可以通過Cache取得更高的性能。對于應用程序,Cache通過內(nèi)存或磁盤保存了數(shù)據(jù)庫中當前有關(guān)數(shù)據(jù)狀態(tài),它是一個存于當?shù)氐臄?shù)據(jù)備份。Cache位于數(shù)據(jù)庫和應用程序之間,從數(shù)據(jù)庫中更新數(shù)據(jù),并給程序提供數(shù)據(jù)。Hibernate實現(xiàn)了良好的Cache機制,可以借助Hibernate內(nèi)部的Cache迅速提高系統(tǒng)數(shù)據(jù)讀取性能。Hibernate中的Cache可分為兩層:一級Cache和二級Cache

3、。一級CacheSession實現(xiàn)了第一級Cache,它屬于事務級數(shù)據(jù)緩沖。一旦事務結(jié)束,這個Cache也隨之失效。一個Session的生命周期對應一個數(shù)據(jù)庫事務或一個程序事務。Session-cache保證在一個Session中兩次請求同一個對象時,取得的對象是同一個Java實例,有時它可以避免不必要的數(shù)據(jù)沖突。另外,它還能保證另一些重要的性能。在對一個對象循環(huán)引用時,不至于產(chǎn)生堆棧溢出。當數(shù)據(jù)庫事務結(jié)束時,對于同一數(shù)據(jù)庫行,不會產(chǎn)生數(shù)據(jù)沖突,因為對于數(shù)據(jù)庫中的一行,至多有一個對象來表示它。一個事務中

4、可能會有很多個處理單元,在一個處理單元中做的操作都會立即被另外的處理單元得知。不用刻意去打開Session-cache,它總是被打開并且不能被關(guān)閉。當使用save()、update()或saveOrUpdate()來保存數(shù)據(jù)更改,或通過load()、find()、list()等方法來得到對象時,對象就會被加入到Session-cache。如果要同步很大數(shù)量的對象,這是需要有效地管理Cache,可以用Session的evict()方法從一級Cache中移除對象。例如:Sessionsession=Hibe

5、rnateUtil.currentSession();Transactiontx=session.beginTransaction();for(inti=0;i<100000;i++){Studentstu=newStudent();….session.save(stu);}tx.commit();session.close();?在保存50000個對象時,程序可能拋出OutOfMemoryException異常,因為Hibernate在一級Cache緩存了新加入數(shù)據(jù)庫的所有對象。要解決這個問題,首先設

6、置JDBC批處理數(shù)量到一個合理的數(shù)值(一般是10~20)。在hibernate.properties配置文件中設置如下:?hibernate.jdbc.batch_size20或在hibernate.cfg.xml中設置如下:20然后在一定的時候提交更改并清空Session的Cache:?Sessionsession=HibernateUtil.currentSession();Transactio

7、ntx=session.beginTransaction();for(inti=0;i<100000;i++){Studentstu=newStudent();….session.save(stu);if(i%20==0){//每保存完20個Student對象后,進行以下操作session.flush();//提交更新session.clear();//清除Cache,釋放內(nèi)存}}tx.commit();session.close();?二級Cache二級Cache是SessionFactory范圍內(nèi)的

8、緩存,所有的Session共享同一個二級Cache。在二級Cache中保存持久性實例的散裝形式的數(shù)據(jù)。二級Cache的內(nèi)部是如何實現(xiàn)的并不重要,重要的是采用哪種正確的緩存策略,以及采用哪種CacheProviders。持久化不同的數(shù)據(jù)需要不同的Cache策略,比如說一些因素將影響到Cache策略選擇:數(shù)據(jù)的讀/寫比例、數(shù)據(jù)表是否能被其他的應用程序所訪問等。對于一些讀/寫比例高的數(shù)據(jù)可以打開它的緩存,允許這些數(shù)據(jù)進入二級緩存容器有利于系統(tǒng)性能

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。