Hibernate的緩存?

一、why(爲什麼要用 Hibernate緩存?)

Hibernate是一個持久層框架,經常訪問物理數據庫。爲了降低應用程序對物理數據源訪問的頻次,從而提高應用程序的運行性能。緩存內的數據是對物理數據源中的數據的複製,應用程序在運行時從緩存讀寫數據,在特定的時刻或事件會同步緩存和物理數據源的數據。爲了提供訪問速度,把磁盤或數據庫訪問變成內存訪問。

二、what(Hibernate緩存原理是怎樣的?)Hibernate緩存包括兩大類:Hibernate一級緩存和 Hibernate二級緩存。

1.Hibernate一級緩存又稱爲“Session的緩存”。Session緩存內置不能被卸載,Session的緩存是事務範圍的緩存(Session對象的生命週期通常對應一個數據庫事務或者一個應用事務)。一級緩存中,持久化類的每個實例都具有唯一的 OID。

2.Hibernate二級緩存又稱爲“SessionFactory的緩存”。由於 SessionFactory 對象的生命週期和應用程序的整個過程對應,因此 Hibernate 二級緩存是進程範圍或者集羣範圍的緩存,有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略爲被緩存的數據提供了事務隔離級別。第二級緩存是可選的,是一個可配置的插件,默認下 SessionFactory不會啓用這個插件。Hibernate提供了 org.hibernate.cache.CacheProvider接口,它充當緩存插件與 Hibernate之間的適配器。

總結一下:

Hibernate中的緩存分一級緩存和二級緩存。

一級緩存就是 Session 級別的緩存,在事務範圍內有效是,內置的不能被卸載。二級緩存是 SesionFactory級別的緩存,從應用啓動到應用結束有效。是可選的,默認沒有二級緩存,需要手動開啓。保存數據庫後,緩存在內存中保存一份,如果更新了數據庫就要同步更新。

什麼樣的數據適合存放到第二級緩存中?

1)很少被修改的數據 帖子的最後回覆時間

2)經常被查詢的數據 電商的地點

  1. 不是很重要的數據,允許出現偶爾併發的數據

  2. 不會被併發訪問的數據

  3. 常量數據

擴展:hibernate的二級緩存默認是不支持分佈式緩存的。使用 memcahe,redis等中央緩存來代替二級緩存。

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