在Hibernate中,緩存將在以下情況中發(fā)揮作用:
1.通過id[主鍵]加載數(shù)據(jù)的時(shí)候
2.延遲加載
一級(jí)緩存:
又稱內(nèi)部緩存,保存了與當(dāng)前session相關(guān)聯(lián)的數(shù)據(jù)對(duì)象,伴隨Session實(shí)例的創(chuàng)建而創(chuàng)建,消亡而消亡。因此又稱此緩存為Session level cache。
一級(jí)緩存正常情況下又Hibernate自動(dòng)維護(hù),如果需要手動(dòng)干預(yù),可以通過以下方法完成。
1.Session.evict
將某個(gè)特定對(duì)象從內(nèi)部緩存中清除。
2.Sessin.clear
清空內(nèi)部緩存
二級(jí)緩存:
又稱為SessionFactory Level Cache.
對(duì)什么樣的數(shù)據(jù)使用二級(jí)緩存?
對(duì)所有數(shù)據(jù)都進(jìn)行緩存是最簡(jiǎn)單的辦法,也是最常用的辦法。
但是某些情況下,反而會(huì)影響性能,比如電話費(fèi)查詢系統(tǒng),如果實(shí)行緩存,內(nèi)存會(huì)被幾乎不可能再被重用的數(shù)據(jù)充斥,導(dǎo)致性能下降。
如果數(shù)據(jù)滿足以下條件,可以將其納入緩存管理:
1.數(shù)據(jù)不會(huì)被第三方應(yīng)用修改。
2.data size在可以接受的范圍之內(nèi)
3.數(shù)據(jù)更新頻率較低
4.同一數(shù)據(jù)可能會(huì)被系統(tǒng)頻繁引用
5.非關(guān)鍵數(shù)據(jù)
Hibernate本身并沒提供二級(jí)緩存的產(chǎn)品化實(shí)現(xiàn)(只提供了一個(gè)基于HashTable的簡(jiǎn)單緩存以供調(diào)試),可以使用第三方緩存來實(shí)現(xiàn)。
默認(rèn)采用EHCache作為二級(jí)緩存實(shí)現(xiàn)。
EHCache org.ehcache.hibernate.Provider