Hibernate緩存機制

首先說下Hibernate緩存的作用(即爲什麼要用緩存機制),然後再具體說說Hibernate中緩存的分類情況,
最後可以舉個具體的例子。
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() 方法,從一級緩存中去掉這些對象及其集合。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章