Hibernate 二級快取

2021-09-01 06:08:47 字數 1615 閱讀 4220

二級快取

hibernate 對資料的快取包括兩個級:[color=red]一級快取,在session的級別上進行,主要是[b]物件快取[/b],以其id為鍵儲存物件,在session的生命期間存在;二級快取,在sessionfactory的級別上進行,有[b]物件快取和查詢快取[/b],查詢快取以查詢條件為鍵儲存查詢結果,在sessionfactory的生命期間存在。[/color]預設地,hibernate只啟用一級快取,通過正確地使用二級快取,往往可以獲得意想不到的效能。

1)物件快取:

[color=red]當抓取乙個物件之後,hiberate將其以id為鍵快取起來,當下次碰到抓取id相同的物件時,可以使用如下配置[/color] 方法1:在快取物件上配置

useage 表示使用什麼型別的快取,譬如唯讀快取、讀寫快取等等(具體參見hibernate參考指南),值得注意的時,有部分快取在hibernate的實現中不支援讀寫快取,譬如jbosscache在hibernate的實現中只是一種唯讀快取,具體快取實現對快取型別的支援情況,可以參見 org.hibernate.cache包

regions表示快取分塊,大部分的快取實現往往對快取進行分塊,該部分是可選的,詳細參見各快取實現

方法2:在hibernate.cfg.xml中配置

我認為第二種更好,可以統一管理

2)查詢快取

[color=red]查詢時候將查詢結果以查詢條件為鍵儲存起來[/color],需要配置如下

a.在hibernate.cfg.xml中配置(啟用查詢快取)

true (前面的屬性名可參見常量

org.hibernate.cfg.enviroment.use_query_cache)

b.程式

query.setcacheable(true);

query.setcacheregions(...);

需要注意的是,查詢快取與物件快取要結合更有效,因為查詢快取僅快取查詢結果列表的主鍵資料

一般情況下在開發中,對一些比較穩定而又被頻繁引用的資料,譬如資料字典之類的,將其進行二級快取,對一些查詢條件和查詢資料變化不頻繁而又常常被使用的查詢,將其進行二級快取。由於二級快取是放在記憶體中,而且hibernate的快取不是弱引用快取(weekreference),所以注意不要將大塊的資料放入其中,否則可能會被記憶體造成比較大的壓力。

3.批量資料操作

[color=red]當進行大批量資料操作(幾萬甚至幾十幾百萬)時,需要注意兩點,一,批量提交,二,及時清除不需要的一級快取資料[/color] 1)所謂的批量提交,就是不要頻繁使用session的flush,每一次進行flush,hibernate將po資料於資料庫進行同步,對於海量級資料操作來說是效能災難(同時提交幾千條資料和提交一條資料flush一次效能差別可能會是幾十倍的差異)。一般將資料操作放在事務中,當事務提交時 hibernate自動幫你進行flush操作。

2)及時清除不需要的一級快取資料:[color=red]由於hibernate預設採用一級快取,而在 session的生命期間,所有資料抓取之後會放入一級快取中,而當資料規模比較龐大時,抓取到記憶體中的資料會讓記憶體壓力非常大,一般分批運算元據,被一次操作之後將一級快取清除,譬如

session.clear(user.class) 或者 session. evict(object)[/color]

hibernate二級快取

cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...

hibernate 二級快取

session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...

Hibernate二級快取

hibernate的session在事務級別進行持久化資料的快取操作。當然,也有可能分別為每個類 或集合 配置集群 或jvm級別 sessionfactory級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...