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