一般而言,ORM的數(shù)據(jù)緩存應(yīng)包含如下幾個(gè)層次:
1. 事務(wù)級(jí)緩存(Transcation Layer Cache)
2. 應(yīng)用級(jí)/進(jìn)程級(jí)緩存(Application/Process Layer Cache)
3. 分布式緩存(Cluster Layer Cache)
Hibernate數(shù)據(jù)緩存(Cache)分為兩個(gè)層次,以Hibernate語(yǔ)義加以區(qū)分,可分為:
1. 內(nèi)部緩存(Session Level,也稱為一級(jí)緩存)
2. 二級(jí)緩存(SessionFactory Level,也稱為二級(jí)緩存)
Hibernate中,緩存將在以下情況中發(fā)揮作用:
1. 通過(guò)id[主鍵]加載數(shù)據(jù)時(shí)
2. 延遲加載
內(nèi)部緩存正常情況下由Hibernate自動(dòng)維護(hù),如果需要手動(dòng)干預(yù),可以通過(guò)以下方法完成:
1. Session.evict
將某個(gè)特定對(duì)象從內(nèi)部緩存清除。
2. Session.clear
清空內(nèi)部緩存。
在Hibernate中,二級(jí)緩存涵蓋了應(yīng)用級(jí)緩存和分布式緩存領(lǐng)域。如果數(shù)據(jù)滿足以下條件,則可將其納入緩存管理。
1. 數(shù)據(jù)不會(huì)被第三方應(yīng)用修改;
2. 數(shù)據(jù)大小(Data Size)在可接收的范圍之內(nèi);
3. 數(shù)據(jù)更新頻率較低;
4. 同一數(shù)據(jù)可能會(huì)被系統(tǒng)頻繁引用;
5. 非關(guān)鍵數(shù)據(jù)(關(guān)鍵數(shù)據(jù),如金融帳戶數(shù)據(jù))。
Hibernate本身并未提供二級(jí)緩存的產(chǎn)品化實(shí)現(xiàn),而是為眾多的第三方緩存組件提供了接入接口,較常用的第三方組件有:
1. JCS
2. EHCache
3. OSCache
4. JBossCache
5. SwarmCache
Hibernate中啟用二級(jí)緩存,需要在hibernate.cfg.xml配置hibernate.cache.provider_class參數(shù),之后,需要在映射文件中指定各個(gè)映射實(shí)體(以及collection)的緩存同步策略。Hibernate提供了一下4種內(nèi)置的緩存同步策略:
1. read-only
只讀。對(duì)于不會(huì)發(fā)生改變的數(shù)據(jù),可使用只讀型緩存。
2. nonstrict-read-write
如果程序?qū)Σl(fā)訪問(wèn)下的數(shù)據(jù)同步要求不是非常嚴(yán)格,且數(shù)據(jù)更新操作頻率較低,可以采用本選項(xiàng),獲得較好的性能。
3. read-write
嚴(yán)格可讀寫緩存?;跁r(shí)間戳判定機(jī)制,實(shí)現(xiàn)了“read committed”事務(wù)隔離等級(jí)。可用于對(duì)數(shù)據(jù)同步要求嚴(yán)格的情況,但不支持分布式緩存。這也是實(shí)際應(yīng)用中使用最多的同步策略。
4. transactional
事務(wù)型緩存,必須運(yùn)行在JTA事務(wù)環(huán)境中。
posted on 2005-06-22 18:15
小米 閱讀(6107)
評(píng)論(5) 編輯 收藏 所屬分類:
Hibernate