hibernate一二級快取簡單介紹

alexanderkenndy發表於2014-04-01
Hibernate快取的作用:
Hibernate是一個持久層框架,經常訪問物理資料庫,為了降低應用程式對物理資料來源訪問的頻次,從而提高應用程式的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料
Hibernate快取分類:
Hibernate快取包括兩大類:Hibernate一級快取和Hibernate二級快取。
Hibernate一級快取又稱為“Session的快取”,它是內建的,不能被解除安裝(不能被解除安裝的意思就是這種快取不具有可選性,必須有的功能,不可以取消session快取)。由於Session物件的生命週期通常對應一個資料庫事務或者一個應用事務,因此它的快取是事務範圍的快取。第一級快取是必需的,不允許而且事實上也無法卸除。在第一級快取中,持久化類的每個例項都具有唯一的OID。
Hibernate二級快取又稱為“SessionFactory的快取”,由於SessionFactory物件的生命週期和應用程式的整個過程對應,因此Hibernate二級快取是程式範圍或者叢集範圍的快取,有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略為被快取的資料提供了事務隔離級別。第二級快取是可選的,是一個可配置的外掛,在預設情況下,SessionFactory不會啟用這個外掛。

什麼樣的資料適合存放到第二級快取中?   
1 很少被修改的資料   
2 不是很重要的資料,允許出現偶爾併發的資料   
3 不會被併發訪問的資料   
4 常量資料   
不適合存放到第二級快取的資料?   
1 經常被修改的資料   
2 絕對不允許出現併發訪問的資料,如財務資料,絕對不允許出現併發   
3 與其他應用共享的資料。
搜尋
Hibernate查詢物件如何應用快取?
當Hibernate根據ID訪問資料物件的時候,首先從Session一級快取中查;查不到,如果配置了二級快取,那麼從二級快取中查;如果都查不到,再查詢資料庫,把結果按照ID放入到快取刪除、更新、增加資料的時候,
同時更新快取

Hibernate管理快取例項
無論何時,我們在管理Hibernate快取(Managing the caches)時,當你給save()、update()或saveOrUpdate()方法傳遞一個物件時,或使用load()、 get()、list()、iterate() 或scroll()方法獲得一個物件時, 該物件都將被加入到Session的內部快取中。 當隨後flush()方法被呼叫時,物件的狀態會和資料庫取得同步。 如果你不希望此同步操作發生,或者你正處理大量物件、需要對有效管理記憶體時,你可以呼叫evict() 方法,從一級快取中去掉這些物件及其集合。

相關文章