二級Cache 二級Cache是SessionFactory范圍內的緩存,所有的Session共享同一個二級Cache。在二級Cache中保存持久性實例的散裝形式的數據。二級Cache的內部如何實現并不重要,重要的是采用哪種正確的緩存策略,以及采用哪個Cache提供器。持久化不同的數據需要不同的Cache策略,比如一些因素將影響到Cache策略的選擇:數據的讀/寫比例,數據表是否能被其他的應用程序揚訪問等。對于一些讀/寫比例高的數據可以打開它的緩存,允許這些數據進入二級緩存容器有利于系統性能的優化;而對于能被其它應用程序訪問的數據對象,最好將此對象的二級Cache選項關閉。 設置Hibernate的二級Cache需要分兩步進行:首先確認使用什么數據并發策略,然后配置緩存過期時間并設置Cache提供器。 有4種內置的Hibernate數據并發沖突策略,代表數據庫隔離級別,如下: 1:事務(Transaction)僅在受管理的環境中可用。它保證可重讀的事務隔離級別,可以對讀/寫比例高,很少更新的數據采用該策略。 2:讀寫(read-write)使用時間戳機制維護讀寫提交事務隔離級別。可以對讀/寫比例高,很少更新的數據采用該策略。 3:非嚴格讀寫(notstrict-read-write)不保證Cache和數據庫之間的數據庫的一致性。使用此策略時,應該設置足夠的緩存過期時間,否則可能從緩存中讀出臟數據。當一些數據極少改變,并且當這些數據和數據庫有一部份不量影響不大時,可以使用此策略。 4:只讀(read-only)當確保數據永不改變時,可以使用此策略。
我們確定了Cache策略后,就要挑選一個高效的Cache提供器,它將作為插件被Hibernate調用。Hibernate允許使用下述幾種緩存插件: EhCache:可以在JVM中作為一個簡單進程范圍內的緩存,它可以把緩存的數據放入內存或磁盤,并支持Hibernate中可選用的查詢緩存。 OpenSymphony OSCache:和EhCache相似,并且提供了豐富的緩存過期策略。 SwarmCache:可作為集群范圍的緩存,但不支持查詢緩存。 JBossCache:可作為集群范圍的緩沖,但不支持查詢緩存。
在Hibernate中使用EhCache EhCache是一個純JAVA程序,可以在Hibernate中作為一個插件引入。在Hibernate中使用EhCache需要在Hibernate的配置文件中設置如下: