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() 方法,從一級緩存中去掉這些對 象及其集合。