hibernate的快取分為session和sessionfactory,後者作為工廠負責生成session
session是一級快取,生命週期是事務級別的,隨著事務開始、結束。結束後session自動關閉。
session是唯讀的,不可解除安裝的,隨著專案啟動將基本的session屬性載入好。
sessionfactory的生命週期是程序級別或集群級別(集群資料庫的情況下)
分為內建快取與外接快取,內建快取與session相似,唯讀,不可解除安裝,隨著專案啟動初始化基本屬性(包括預編譯的sql)。
外接快取是乙個可插拔的元件,也就是我們常說的二級快取
二級快取是程序級別的,因此要併發衝突造成的影響,因此有事務級別的隔離策略
二級快取將查詢的資訊通過id來進行儲存,查詢順序是一級快取--二級快取--資料庫,同時這個查詢結果 新增到快取中
事務性操作時,同步更新快取
hibernate的二級快取策略,是針對於id查詢的快取策略,對於條件查詢則毫無作用。為此,hibernate提供了針對條件查詢的query快取。
hibernate 組成乙個query key,query key包括條件查詢
根據這個query key到query快取中查詢對應的結果列表。
query key中的sql涉及到一些表名,如果這些表的任何資料發生修改、刪除、增加等操作,這些相關的query key都要從快取中清空。
總結 hibernate的流程就是 查詢session-查不到-查詢sessionfactory(id策略或query條件策略)-查不到-查資料庫,並將結果儲存到相應的快取策略中
事務性操作後,更新相關快取策略
二級快取是不是相當於乙個已經自動化的redis?(同樣儲存於記憶體中,乙個自動化儲存結果集,乙個需要自己編譯)
hibernate二級快取
cacheconcurrencystrategy.none cacheconcurrencystrategy.read only 唯讀模式,在此模式下,如果對資料進行更新操作,會有異常 cacheconcurrencystrategy.read write 讀寫模式在更新快取的時候會把快取裡面的資料...
hibernate 二級快取
session快取 一級快取 sql查詢結果快取,由hibernate管理 sessionfactory內建快取,內建快取是hibernate自帶的,用於存放預定義的sql以及hbm.xml描述的元資料,不可解除安裝 sessionfactory外接快取 二級快取 由外部外掛程式提供,外接快取的資料...
Hibernate二級快取
hibernate的session在事務級別進行持久化資料的快取操作。當然,也有可能分別為每個類 或集合 配置集群 或jvm級別 sessionfactory級別 的快取。你甚至可以為之插入乙個集群的快取。注意,快取永遠不知道其他應用程式對持久化倉庫 資料庫 可能進行的修改 即使可以將快取資料設定為...