hiberante面試題 --- 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管理緩存實例無論何時,當你給save()、update()或saveOrUpdate()方法傳遞一個對象時,或使用load()、 get()、list()、iterate() 或scroll()方法獲得一個對象時, 該對象都將被加入到Session的內部緩存中。 當隨後flush()方法被調用時,對象的狀態會和數據庫取得同步。 如果你不希望此同步操作發生,或者你正處理大量對象、需要對有效管理內存時,你可以調用evict() 方法,從一級緩存中去掉這些對象及其集合。
 
發佈了25 篇原創文章 · 獲贊 24 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章