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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

记录Hibernate的缓存知识

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

一.Hibernate緩存的作用

? ? Hibernate是一個持久層框架,Hibernate要經(jīng)常訪問物理數(shù)據(jù)庫。為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的頻次,從而提高應(yīng)用程序的運行性能,Hibernate的緩存機制就發(fā)揮了很大的作用。緩存內(nèi)的數(shù)據(jù)是對物理數(shù)據(jù)源中的數(shù)據(jù)的復(fù)制,應(yīng)用程序在運行時從緩存讀寫數(shù)據(jù),在特定的時刻或事件會同步緩存和物理數(shù)據(jù)源的數(shù)據(jù)。

二.Hibernate緩存的分類

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

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

三.Hibernate緩存的管理

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

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

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

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

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

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

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

四.如何判斷是否將數(shù)據(jù)放在二級緩存中

  • 很少被修改的數(shù)據(jù)?

  • 不是很重要的數(shù)據(jù),允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù)  

  • 不會被并發(fā)訪問的數(shù)據(jù)?

  • 常量數(shù)據(jù) 

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

  • EhCache:可作為進程范圍的緩存,存放數(shù)據(jù)的物理介質(zhì)可以是內(nèi)存或硬盤,對Hibernate的查詢緩存提供了支持。

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

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

  • JBossCache:可作為群集范圍內(nèi)的緩存,支持事務(wù)型并發(fā)訪問策略,對Hibernate的查詢緩存提供了支持。

? ??

轉(zhuǎn)載于:https://www.cnblogs.com/superpang/p/5312541.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。