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() 方法,從一級快取中去掉這些物件及其集合。
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() 方法,從一級快取中去掉這些物件及其集合。
相關文章
- Caffeine快取的簡單介紹快取
- Hibernate一級快取(session)與二級快取(sessionFactory)的知識點。快取Session
- redis快取介紹Redis快取
- Android 的二級快取如斯簡單Android快取
- Hibernate中二級快取(sessionFactory)的配置及其使用。快取Session
- 快取融合(Cache Fusion)介紹快取
- 介紹SpringBoot 整合 Redis 快取Spring BootRedis快取
- Hibernate框架簡介⑤框架
- Hibernate框架簡介④框架
- Hibernate框架簡介③框架
- Hibernate框架簡介②框架
- Hibernate框架簡介①框架
- Hibernate Reactive 簡介React
- 分散式快取 - 快取簡介,常用快取演算法分散式快取演算法
- RPC簡單介紹RPC
- Python簡單介紹Python
- KVM簡單介紹
- RMI簡單介紹
- HTML簡單介紹HTML
- HTML 簡單介紹HTML
- JavaScript 簡單介紹JavaScript
- CSS 簡單介紹CSS
- ajax簡單介紹
- SVG簡單介紹SVG
- Clickjacking簡單介紹
- 【Pandas】簡單介紹
- Map簡單介紹
- JSON簡單介紹JSON
- ActiveMQ簡單介紹MQ
- Git_簡單介紹Git
- jQuery Validate簡單介紹jQuery
- JSON物件簡單介紹JSON物件
- <svg>元素簡單介紹SVG
- 簡單介紹 ldd 命令
- 禪道簡單介紹
- Webpack 的簡單介紹Web
- Apache Curator簡單介紹Apache
- spark簡單介紹(一)Spark
- Flutter key簡單介紹Flutter