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