什麼是Hibernate的二級緩存
緩存(Cache): 計算機領域非常通用的概念。它介於應用程序和永久性數據存儲源(如硬盤上的文件或者數據庫)之間,其作用是降低應用程序直接讀寫永久性數據存儲源的頻率,從而提高應用的運行性能。緩存中的數據是數據存儲源中數據的拷貝。緩存的物理介質通常是內存。
Hibernate中提供了兩個級別的緩存
- 一級緩存:是
Session
級別的緩存,它是屬於事務範圍的緩存。這一級別的緩存由hibernate
管理的。 - 二級緩存:是
SessionFactory
級別的緩存,它屬於進程範圍
的緩存。 - 在使用時,二級緩存是可有可無的,但一級緩存是必不可少的。
一級緩存的使用場合:
當使用Session查詢數據時,首先會在Session內部查找該對象是否存在,若存在,則直接返回,否則,就到數據庫中查詢,並將查詢到的結果緩存起來以便後期使用。一級緩存的缺點就是當使用Session來表示一次會話時,它的生命週期較短,而且它不是線程安全的,不能被多個線程共享,因此,在實際使用時,對效率的提升不是非常明顯。
鑑於以上原因,引入二級緩存的概念。二級緩存用來爲Hibernate配置一種全局的緩存,以便實現多個線程與事務共享。在使用了二級緩存機制後,當查詢數據時,會首先在內存緩存中查找,如果不存在,接着在二級緩存中查找,最後纔去數據庫中查找。與一級緩存相比,二級緩存是獨立於Hibernate的軟件部件的,屬於第三方的產品,常見的產品有EhCache、OSCache、JbossCache等。Hibernate3默認使用的產品是EhCache。在使用時,可以根據需求通過配置緩存插件實現二級緩存功能,Hibernate爲了集成這些插件,提供了org.hibernate.cache.CacheProvider接口來充當緩存插件與Hibernate之間的適配器。當然,二級緩存除了以內存作爲存儲介質外,還可以選用硬盤等外部存儲設備。
二級緩存適合的幾種情況:
- 數據量較小(數據量太大會消耗大量內存,造成內存資源緊張,降低系統性能)。
- 對數據的修改較少(會造成頻繁對緩存中的數據進行同步,影響系統的性能)。
- 不會被大量的應用共享的數據(數據被大量線程或事務共享,多線程訪問的同步機制會影響系統性能)。
- 不是很重要的數據(如果要查詢的數據對正確性要求較高,如財務,最好不要使用二級緩存)。
參考自:參考鏈接