日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记录Hibernate的缓存知识

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记录Hibernate的缓存知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.Hibernate緩存的作用

? ? Hibernate是一個持久層框架,Hibernate要經常訪問物理數據庫。為了降低應用程序對物理數據源訪問的頻次,從而提高應用程序的運行性能,Hibernate的緩存機制就發揮了很大的作用。緩存內的數據是對物理數據源中的數據的復制,應用程序在運行時從緩存讀寫數據,在特定的時刻或事件會同步緩存和物理數據源的數據。

二.Hibernate緩存的分類

? ? Hibernate的緩存分為兩大類:一級緩存和二級緩存。

  • Hibernate一級緩存又稱為“Session的緩存”,它是內置的,不能被卸載(不能被卸載的意思就是這種緩存不具有可選性,必須有的功能,不可以取消session緩存)。由于Session對象的生命周期通常對應一個數據庫事務或者一個應用事務,因此它的緩存是事務范圍的緩存。第一級緩存是必需的,不允許而且事實上也無法卸除。在第一級緩存中,持久化類的每個實例都具有唯一的OID。
  • Hibernate二級緩存又稱為“SessionFactory的緩存”,由于SessionFactory對象的生命周期和應用程序的整個過程對應,因此Hibernate二級緩存是進程范圍或者集群范圍的緩存,有可能出現并發問題,因此需要采用適當的并發訪問策略,該策略為被緩存的數據提供了事務隔離級別。第二級緩存是可選的,是一個可配置的插件,在默認情況下,SessionFactory不會啟用這個插件。

三.Hibernate緩存的管理

  • 一級緩存的管理:當應用程序調用Session的save()、update()、saveOrUpdate()、get()或load(),以及調用查詢接口的 list()、iterate()--(用的是n+1次查詢,先查id,然后根據 id 到緩存里面查找,如果沒有命中,再到數據庫中查找該id對應的其他屬性)或filter()方法時,如果在Session緩存中還不存在相應的對象,Hibernate就會把該對象加入到第一級緩存中。當清理緩存時,Hibernate會根據緩存中對象的狀態變化來同步更新數據庫。 Session為應用程序提供了兩個管理緩存的方法: evict(Object obj):從緩存中清除參數指定的持久化對象。 clear():清空緩存中所有持久化對象,flush():使緩存與數據庫同步。當查詢相應的字段如(name),而不是對象時,不支持緩存。

  • Hibernate的二級緩存策略的一般過程如下:

    ???1:條件查詢的時候,總是發出一條select * from table_name where …. (選擇所有字段)這樣的SQL句查詢數據庫,一次獲得所有的數據對象(這個問題要考慮,如果你查詢十萬條數據時,內存不是被占用)。

     2:把獲得的所有數據對象根據ID放入到第二級緩存中。

     3: 當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,如果配置了二級緩存,那么從二級緩存中查;查不到,再查詢數據庫,把結果按照ID放入到緩存。

    ?? 4:刪除、更新、增加數據的時候,同時更新緩存。

    ? Hibernate的二級緩存策略,是針對于ID查詢的緩存策略,對于條件查詢則毫無作用。為此,Hibernate提供了針對條件查詢的Query Cache

四.如何判斷是否將數據放在二級緩存中

  • 很少被修改的數據?

  • 不是很重要的數據,允許出現偶爾并發的數據  

  • 不會被并發訪問的數據?

  • 常量數據 

五.二級緩存的插件有哪些

  • EhCache:可作為進程范圍的緩存,存放數據的物理介質可以是內存或硬盤,對Hibernate的查詢緩存提供了支持。

  • OSCache:可作為進程范圍的緩存,存放數據的物理介質可以是內存或硬盤,提供了豐富的緩存數據過期策略,對Hibernate的查詢緩存提供了支持。

  • SwarmCache:可作為群集范圍內的緩存,但不支持Hibernate的查詢緩存。

  • JBossCache:可作為群集范圍內的緩存,支持事務型并發訪問策略,對Hibernate的查詢緩存提供了支持。

? ??

轉載于:https://www.cnblogs.com/superpang/p/5312541.html

總結

以上是生活随笔為你收集整理的记录Hibernate的缓存知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。