hibernate系列-0407上午13hibernate二級緩存_第1頁
hibernate系列-0407上午13hibernate二級緩存_第2頁
hibernate系列-0407上午13hibernate二級緩存_第3頁
hibernate系列-0407上午13hibernate二級緩存_第4頁
hibernate系列-0407上午13hibernate二級緩存_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

緩存的意義性應(yīng)用程序中使用的數(shù)據(jù)均保存在上,當(dāng)應(yīng)用程序需要使用數(shù)據(jù)時,從行獲取。緩存是介于應(yīng)用程序與性介質(zhì)之介質(zhì)上進(jìn)介質(zhì)之間的一塊數(shù)據(jù)

區(qū)域。利用緩存,應(yīng)用程序可以將使用的數(shù)據(jù)臨時放入緩存,需要再次使用時從緩存中獲取,降低應(yīng)用程序與

性介質(zhì)之間數(shù)據(jù)交換的頻率,提升應(yīng)用程序的運(yùn)行性能。緩存中的數(shù)據(jù)都來源于性介質(zhì)之上,緩存僅僅是一個輔助性的區(qū)域,不是數(shù)據(jù)的最終存放位置。通常緩存區(qū)域會選取比性介質(zhì)速度稍快的空間,例如內(nèi)存中。傳智播客教育二級緩存二級緩存是一種名稱的定義,指在已有緩存的基礎(chǔ)上,再增設(shè)一種緩存,二級緩存只為一級緩存服務(wù)二級緩存彌補(bǔ)一級緩存的不足。一級緩存的數(shù)據(jù)是針對單次操作而設(shè)計,服務(wù)于一次請求操作。由于單次操作的數(shù)據(jù)量不會涉及很多數(shù)據(jù),因此一級緩存數(shù)據(jù)量較小,生命周期較短。并且單次數(shù)據(jù)操作完畢后,下一次請求的數(shù)據(jù)將無法使用上一次緩存的數(shù)據(jù)。二級緩存有效彌補(bǔ)一級緩存的缺陷,在現(xiàn)有一級緩存基礎(chǔ)上,在多次請求操作間進(jìn)行數(shù)據(jù)共享,有效減少

介質(zhì)的次數(shù)。傳智播客教育Hibernate支持的緩存Hibernate支持兩種緩存一級緩存也稱作Session級別的緩存,該緩存無法卸載,屬于Hibernate內(nèi)置的緩存,綁定每次連接數(shù)據(jù)庫的Session對象。二級緩存也稱作SessionFactory級別的緩存,該緩存是通過外部技術(shù)實現(xiàn)的,通過使用不同的緩存供應(yīng)商提供的緩存技術(shù),為Hibernate加開一級緩存,可以根據(jù)需要進(jìn)行安裝或卸載。目前Hibernate支持的二級緩存主要有4種ehcacheOpenSymphonySwarmCacheJBossCache傳智播客教育緩存結(jié)構(gòu)圖AppHibernateSessionFactorySessionSessionDB一級緩存一級緩存二級緩存?zhèn)髦遣タ徒逃壘彺嬷械臄?shù)據(jù)要求二級緩存的目的主要是為了提高查詢速度,因此放入二級緩存的數(shù)據(jù)有嚴(yán)格的要求適合加入二級緩存的數(shù)據(jù)很少被修改的數(shù)據(jù)不是很重要的數(shù)據(jù),允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù)不會被并發(fā) 的數(shù)據(jù)參考數(shù)據(jù)不適合加入二級緩存的數(shù)據(jù)經(jīng)常被修改的數(shù)據(jù)財務(wù)數(shù)據(jù),絕對不允許出現(xiàn)并發(fā)與其他應(yīng)用共享的數(shù)據(jù)傳智播客教育二級緩存的使用二級緩存的出現(xiàn)有效的提高了信息查詢的速度,但是并不是配置二級緩存后將所有數(shù)據(jù)放入二級緩存一定能加快速度,不合理的使用會降低整體應(yīng)用的性能在實際開發(fā)過程中,前期一定要對數(shù)據(jù)進(jìn)行合理的分析,有選擇將數(shù)據(jù)放入二級緩存,而不能盲目的開啟使用二級緩存教務(wù)系統(tǒng)——課程數(shù)據(jù)、教師數(shù)據(jù)、學(xué)生數(shù)據(jù)、成績數(shù)據(jù)辦公自動化系統(tǒng)——會議室使用記錄、用車記錄、工資數(shù)據(jù)淘寶

——商品數(shù)據(jù)、用戶數(shù)據(jù)、訂單數(shù)據(jù)、地址數(shù)據(jù)?——

信息、辦公流程數(shù)據(jù)、

數(shù)據(jù)傳智播客教育Hibernate二級緩存配置方式Hibernate配置二級緩存加入二級緩存供應(yīng)商jar包為項目添加ehcache對應(yīng)的jar包系統(tǒng)配置文件中開啟二級緩存(hibernate.cfg.xml)系統(tǒng)配置文件中配置二級緩存供應(yīng)商(hibernate.cfg.xml)添加二級緩存配置信息src

下創(chuàng)建ehcache.xml文件具體配置信息參考ehcache對應(yīng)的jar包中配置文件傳智播客教育Hibernate二級緩存配置方式配置加入二級緩存的數(shù)據(jù)方式一:在

文件hbm.xml文件中添加配置類對象參與緩存集合中對象參與緩存?zhèn)髦遣タ徒逃鼿ibernate二級緩存配置方式配置加入二級緩存的數(shù)據(jù)方式二:在系統(tǒng)配置文件cfg.xml文件中添加配置使用class-cache定義類對象緩存使用collection-cache定義集合對象緩存,注意這里定義的是關(guān)聯(lián)關(guān)系中的集合對象名,而不是關(guān)聯(lián)模型類,更不是集合usage定義了緩存的種類:讀寫緩存、只讀緩存等傳智播客教育傳智播客教育ehcache二級緩存配置詳解<diskStore

path=“java.io.tmpdir”/><defaultCachemaxElementsInMemory="10"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="1200"overflowToDisk="true"maxElementsOnDisk="10000000"diskPersistent="false"diskExpiryThreadIntervalSeconds=“60"memoryStoreEvictionPolicy="LRU"/>持久化數(shù)據(jù)位置緩存最大元素數(shù)量緩存數(shù)據(jù)是否過期緩存數(shù)據(jù)最大不活動間隔緩存數(shù)據(jù)最大生命周期緩存溢出數(shù)據(jù)是否持久化介質(zhì)最大元素數(shù)量JVM退出時是否進(jìn)行介質(zhì)緩存過期數(shù)據(jù)周期緩存溢出數(shù)據(jù)處理策略LRULFUFIFO最少使用時間段最不常使用先進(jìn)先出ehcache自定義二級緩存配置詳解在ehcache.xml中添加自定義緩存設(shè)定,指定不同的緩存策略<cache

name=“my”其他配置/>針對不同的緩存內(nèi)容,設(shè)定使用不同的cache策略傳智播客教育二級緩存數(shù)據(jù)二級緩存的數(shù)據(jù)必須先加載才可以使用,如果二級緩存中沒有要查找的數(shù)據(jù),在進(jìn)行了對應(yīng)的查找操作后,該數(shù)據(jù)立即進(jìn)入二級緩存二級緩存的數(shù)據(jù)獲取必須按照OID進(jìn)行,因此查詢方法中不是按照OID進(jìn)行的查詢將不能從二級緩存獲取Query對應(yīng)的操作Criteria對應(yīng)的操作關(guān)于Query與Criteria對象執(zhí)行查詢時生成的SQL語句的識別傳智播客教育緩存結(jié)構(gòu)圖(按OID查詢數(shù)據(jù))HibernateSessionFactoryAppOIDSession1一級緩存2二級緩存3DB4.SQL567一級緩存與二級緩存中都不存在要查找的數(shù)據(jù)傳智播客教育緩存結(jié)構(gòu)圖(按OID查詢數(shù)據(jù))HibernateSessionFactoryDB二級緩存AppOIDSession1一級緩存23一級緩存中存在要查找的數(shù)據(jù)傳智播客教育緩存結(jié)構(gòu)圖(按OID查詢數(shù)據(jù))HibernateSessionFactoryAppOIDDBSession1一級緩存2二級緩存345二級緩存中存在要查找的數(shù)據(jù)傳智播客教育二級緩存工作流程二級緩存開啟后的數(shù)據(jù)操作查詢數(shù)據(jù)如果按OID查找數(shù)據(jù),檢查一級緩存中是否存在查找數(shù)據(jù),如果存在返回給客戶端如果按OID查找數(shù)據(jù),一級緩存中不存在要查找的數(shù)據(jù),檢查二級緩存中是否存在查找數(shù)據(jù),如果存在將二級緩存數(shù)據(jù)加載入一級緩存,然后由一級緩存返回給客戶端如果一級緩存和二級緩存中都不存在要查找的數(shù)據(jù),到數(shù)據(jù)庫中執(zhí)行對應(yīng)的SQL語句查詢出對應(yīng)的數(shù)據(jù),將數(shù)據(jù)加載一級緩存,一級緩存再將其加載到二級緩存,供下次按OID查找數(shù)據(jù)使用傳智播客教育緩存結(jié)構(gòu)圖(使用SQL查詢數(shù)據(jù))HibernateSessionFactory一級緩存二級緩存AppSQLSession1DB2.SQL345使用SQL查詢包括使用Query對象和Criteria對象查詢傳智播客教育二級緩存工作流程二級緩存開啟后的數(shù)據(jù)操作使用SQL查詢的數(shù)據(jù)(不做緩存數(shù)據(jù)存在性檢測)執(zhí)行SQL語句獲取要查詢的數(shù)據(jù)將查詢的數(shù)據(jù)更新到一級緩存中一級緩存將變化的數(shù)據(jù)更新到二級緩存中將查詢的數(shù)據(jù)返回給客戶端傳智播客教育緩存結(jié)構(gòu)圖(添加數(shù)據(jù))AppHibernateSessionFactorySessionDB一級緩存二級緩存?zhèn)髦遣タ徒逃彺娼Y(jié)構(gòu)圖(刪除修改數(shù)據(jù))AppHibernateSessionFactorySessionDB一級緩存二級緩存?zhèn)髦遣タ徒逃壘彺婀ぷ髁鞒潭壘彺骈_啟后的數(shù)據(jù)操作添加數(shù)據(jù)更新所在一級緩存的數(shù)據(jù)更新數(shù)據(jù)庫對應(yīng)數(shù)據(jù)刪除、修改數(shù)據(jù)更新所在一級緩存的數(shù)據(jù)一級緩存將變化的數(shù)據(jù)更新到二級緩存更新數(shù)據(jù)庫對應(yīng)數(shù)據(jù)傳智播客教育獲取二級緩存數(shù)據(jù)注意事項二級緩存的加入可以使用戶減少與數(shù)據(jù)庫間進(jìn)行數(shù)據(jù)交互的次數(shù),但是并不是所有操作的數(shù)據(jù)都可以從二級緩存中獲取查詢所有姓“李”的教師信息時,如果二級緩存中加載有一定量的數(shù)據(jù),但是不確定是不是所有數(shù)據(jù),此時數(shù)據(jù)獲取如果從二級緩存中進(jìn)行,將出現(xiàn)問題。二級緩存不是數(shù)據(jù)庫的克隆版,不可能將整個數(shù)據(jù)庫信息裝入二級緩存,從設(shè)計上也是不允許的二級緩存對數(shù)據(jù)的識別采用OID的形式進(jìn)行,只有僅按照OID的形式獲取數(shù)據(jù),才能從二級緩存中獲取所有從數(shù)據(jù)庫查詢得到的數(shù)據(jù)都將加入二級緩存,為后期查詢提高查詢速度傳智播客教育二級緩存數(shù)據(jù)區(qū)域二級緩存中的

區(qū)域共分為4個類對象緩存區(qū)域關(guān)聯(lián)關(guān)系集合對象緩存區(qū)域更新標(biāo)識時間戳區(qū)域查詢緩存區(qū)域傳智播客教育二級緩存——類對象緩存區(qū)類緩存區(qū)四種數(shù)據(jù)普通類了類級別對象的緩存數(shù)據(jù),包括以下一對多、多對多關(guān)聯(lián)關(guān)系中的主數(shù)據(jù)和從數(shù)據(jù)一對一關(guān)聯(lián)關(guān)系中的主數(shù)據(jù)和從數(shù)據(jù)一對一關(guān)聯(lián)中的主關(guān)聯(lián)數(shù)據(jù)和從關(guān)聯(lián)數(shù)據(jù)上述數(shù)據(jù)均是單一對象的格式二級緩存中

的數(shù)據(jù)不是Java對象的格式,而是原始數(shù)據(jù)的散裝數(shù)據(jù),簡言之就是將原始對象的數(shù)據(jù)分散,便于管理,獲取時重新組裝成對象傳智播客教育二級緩存——關(guān)聯(lián)關(guān)系集合對象緩存區(qū)集合緩存區(qū)

了類級別對象的緩存數(shù)據(jù),包括以下四種數(shù)據(jù)一對多關(guān)聯(lián)關(guān)系中的主關(guān)聯(lián)數(shù)據(jù)多對一關(guān)聯(lián)關(guān)系中的從關(guān)聯(lián)數(shù)據(jù)多對多關(guān)聯(lián)關(guān)系中的主關(guān)聯(lián)數(shù)據(jù)和從關(guān)聯(lián)數(shù)據(jù)上述數(shù)據(jù)均是集合對象的格式二級緩存中的集合數(shù)據(jù)僅保存對應(yīng)對象在類對象緩存區(qū)保存數(shù)據(jù)的OID,集合中不存在任何OID之外的屬性數(shù)據(jù),因此集合數(shù)據(jù)如果沒有設(shè)定對應(yīng)的類對象緩沖區(qū)將失去緩存的意義傳智播客教育二級緩存——更新時間戳區(qū)與更新標(biāo)識二級緩存中保存的數(shù)據(jù)與數(shù)據(jù)庫對應(yīng),當(dāng)客戶端執(zhí)行不使用一級緩存提供的更新操作時,此更新無法通知二級緩存進(jìn)行數(shù)據(jù)同步,造成數(shù)據(jù)不同步為避免該問題,二級緩存始終

被緩存數(shù)據(jù)對應(yīng)的所有DML語言,如果發(fā)現(xiàn)對應(yīng)數(shù)據(jù)進(jìn)行了更新,無論是否進(jìn)行了對應(yīng)的真實數(shù)據(jù)更改,再次獲取二級緩存中的數(shù)據(jù)時,強(qiáng)制重新加載數(shù)據(jù),與數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行同步。實現(xiàn)方式:時間戳:為二級緩存數(shù)據(jù)追加加載時間與修改時間標(biāo)識標(biāo)志位:為二級緩存數(shù)據(jù)追加修改狀態(tài)標(biāo)識傳智播客教育二級緩存數(shù)據(jù)形式二級緩存中數(shù)據(jù)類緩存區(qū)集合緩存區(qū)OIDPropertiesstartTimemaxUseTimeect..lastUseTimeuflag1Lname:

;age:344456124null445612402Lname:

;age:994456124null445612403Lname:Tom;age:44456124null445612414Lname:Jerry;age:34456124null445612405Lname:Kitty;age:54456124null44561241集合名稱starTimeectdatasstudents4456124{1L,5L,103L,37L,9L,201L}teachers4456124{32L,86L,90L,103L,77L,4L,591L}傳智播客教育二級緩存——查詢緩存區(qū)二級緩存只能依賴僅使用OID進(jìn)行查詢,這一設(shè)定將對二級緩存的實用性大打折扣查詢緩存可以有效解決上述問題查詢緩存使用查詢的最終SQL語句作為Key查詢緩存使用查詢的結(jié)果作為ValueSQLResultselect

*

from

tbl_user…select name

from

tbl_user……..傳智播客教

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論