麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

hibernate 一級(jí)緩存和二級(jí)緩存

2019-11-14 22:18:53
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
hibernate 一級(jí)緩存和二級(jí)緩存

緩存是介于應(yīng)用程序和物理數(shù)據(jù)源之間,其作用是為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問(wèn)的頻次,從而提高了應(yīng)用的運(yùn)行性能。緩存內(nèi)的數(shù)據(jù)是對(duì)物理數(shù)據(jù)源中的數(shù)據(jù)的復(fù)制,應(yīng)用程序在運(yùn)行時(shí)從緩存讀寫(xiě)數(shù)據(jù),在特定的時(shí)刻或事件會(huì)同步緩存和物理數(shù)據(jù)源的數(shù)據(jù)。

  緩存的介質(zhì)一般是內(nèi)存,所以讀寫(xiě)速度很快。但如果緩存中存放的數(shù)據(jù)量非常大時(shí),也會(huì)用硬盤(pán)作為緩存介質(zhì)。緩存的實(shí)現(xiàn)不僅僅要考慮存儲(chǔ)的介質(zhì),還要考慮到管理緩存的并發(fā)訪問(wèn)和緩存數(shù)據(jù)的生命周期。

   Hibernate的緩存包括session的緩存和SessionFactory的緩存,其中SessionFactory的緩存又可以分為兩類(lèi):內(nèi) 置緩存和外置緩存。Session的緩存是內(nèi)置的,不能被卸載,也被稱(chēng)為Hibernate的第一級(jí)緩存。SessionFactory的內(nèi)置緩存和 Session的緩存在實(shí)現(xiàn)方式上比較相似,前者是SessionFactory對(duì)象的一些集合屬性包含的數(shù)據(jù),后者是指Session的一些集合屬性包 含的數(shù)據(jù)。SessionFactory的內(nèi)置緩存中存放了映射元數(shù)據(jù)和預(yù)定義SQL語(yǔ)句,映射元數(shù)據(jù)是映射文件中數(shù)據(jù)的拷貝,而預(yù)定義SQL語(yǔ)句是在 Hibernate初始化階段根據(jù)映射元數(shù)據(jù)推導(dǎo)出來(lái),SessionFactory的內(nèi)置緩存是只讀的,應(yīng)用程序不能修改緩存中的映射元數(shù)據(jù)和預(yù)定義 SQL語(yǔ)句,因此SessionFactory不需要進(jìn)行內(nèi)置緩存與映射文件的同步。SessionFactory的外置緩存是一個(gè)可配置的插件。在默認(rèn) 情況下,SessionFactory不會(huì)啟用這個(gè)插件。外置緩存的數(shù)據(jù)是數(shù)據(jù)庫(kù)數(shù)據(jù)的拷貝,外置緩存的介質(zhì)可以是內(nèi)存或者硬盤(pán)。 SessionFactory的外置緩存也被稱(chēng)為Hibernate的第二級(jí)緩存。

  Hibernate的這兩級(jí)緩存都位于持久化層,存放的都是數(shù)據(jù)庫(kù)數(shù)據(jù)的拷貝,那么它們之間的區(qū)別是什么呢?為了理解二者的區(qū)別,需要深入理解持久化層的緩存的兩個(gè)特性:緩存的范圍和緩存的并發(fā)訪問(wèn)策略。

  持久化層的緩存的范圍

  緩存的范圍決定了緩存的生命周期以及可以被誰(shuí)訪問(wèn)。緩存的范圍分為三類(lèi)。

  1 事務(wù)范圍:緩存只能被當(dāng)前事務(wù)訪問(wèn)。緩存的生命周期依賴(lài)于事務(wù)的生命周期,當(dāng)事務(wù)結(jié)束時(shí),緩存也就結(jié)束生命周期。在此范圍下,緩存的介質(zhì)是內(nèi)存。事務(wù)可以是數(shù)據(jù)庫(kù)事務(wù)或者應(yīng)用事務(wù),每個(gè)事務(wù)都有獨(dú)自的緩存,緩存內(nèi)的數(shù)據(jù)通常采用相互關(guān)聯(lián)的的對(duì)象形式。

   2 進(jìn)程范圍:緩存被進(jìn)程內(nèi)的所有事務(wù)共享。這些事務(wù)有可能是并發(fā)訪問(wèn)緩存,因此必須對(duì)緩存采取必要的事務(wù)隔離機(jī)制。緩存的生命周期依賴(lài)于進(jìn)程的生命周期,進(jìn) 程結(jié)束時(shí),緩存也就結(jié)束了生命周期。進(jìn)程范圍的緩存可能會(huì)存放大量的數(shù)據(jù),所以存放的介質(zhì)可以是內(nèi)存或硬盤(pán)。緩存內(nèi)的數(shù)據(jù)既可以是相互關(guān)聯(lián)的對(duì)象形式也可 以是對(duì)象的松散數(shù)據(jù)形式。松散的對(duì)象數(shù)據(jù)形式有點(diǎn)類(lèi)似于對(duì)象的序列化數(shù)據(jù),但是對(duì)象分解為松散的算法比對(duì)象序列化的算法要求更快。

  3 集群范圍:在集群環(huán)境中,緩存被一個(gè)機(jī)器或者多個(gè)機(jī)器的進(jìn)程共享。緩存中的數(shù)據(jù)被復(fù)制到集群環(huán)境中的每個(gè)進(jìn)程節(jié)點(diǎn),進(jìn)程間通過(guò)遠(yuǎn)程通信來(lái)保證緩存中的數(shù)據(jù)的一致性,緩存中的數(shù)據(jù)通常采用對(duì)象的松散數(shù)據(jù)形式。

  對(duì)大多數(shù)應(yīng)用來(lái)說(shuō),應(yīng)該慎重地考慮是否需要使用集群范圍的緩存,因?yàn)樵L問(wèn)的速度不一定會(huì)比直接訪問(wèn)數(shù)據(jù)庫(kù)數(shù)據(jù)的速度快多少。

   持久化層可以提供多種范圍的緩存。如果在事務(wù)范圍的緩存中沒(méi)有查到相應(yīng)的數(shù)據(jù),還可以到進(jìn)程范圍或集群范圍的緩存內(nèi)查詢(xún),如果還是沒(méi)有查到,那么只有到 數(shù)據(jù)庫(kù)中查詢(xún)。事務(wù)范圍的緩存是持久化層的第一級(jí)緩存,通常它是必需的;進(jìn)程范圍或集群范圍的緩存是持久化層的第二級(jí)緩存,通常是可選的。

  持久化層的緩存的并發(fā)訪問(wèn)策略

  當(dāng)多個(gè)并發(fā)的事務(wù)同時(shí)訪問(wèn)持久化層的緩存的相同數(shù)據(jù)時(shí),會(huì)引起并發(fā)問(wèn)題,必須采用必要的事務(wù)隔離措施。

  在進(jìn)程范圍或集群范圍的緩存,即第二級(jí)緩存,會(huì)出現(xiàn)并發(fā)問(wèn)題。因此可以設(shè)定以下四種類(lèi)型的并發(fā)訪問(wèn)策略,每一種策略對(duì)應(yīng)一種事務(wù)隔離級(jí)別。

  事務(wù)型:僅僅在受管理環(huán)境中適用。它提供了Repeatable Read事務(wù)隔離級(jí)別。對(duì)于經(jīng)常被讀但很少修改的數(shù)據(jù),可以采用這種隔離類(lèi)型,因?yàn)樗梢苑乐古K讀和不可重復(fù)讀這類(lèi)的并發(fā)問(wèn)題。

  讀寫(xiě)型:提供了Read Committed事務(wù)隔離級(jí)別。僅僅在非集群的環(huán)境中適用。對(duì)于經(jīng)常被讀但很少修改的數(shù)據(jù),可以采用這種隔離類(lèi)型,因?yàn)樗梢苑乐古K讀這類(lèi)的并發(fā)問(wèn)題。

   非嚴(yán)格讀寫(xiě)型:不保證緩存與數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性。如果存在兩個(gè)事務(wù)同時(shí)訪問(wèn)緩存中相同數(shù)據(jù)的可能,必須為該數(shù)據(jù)配置一個(gè)很短的數(shù)據(jù)過(guò)期時(shí)間,從而盡量 避免臟讀。對(duì)于極少被修改,并且允許偶爾臟讀的數(shù)據(jù),可以采用這種并發(fā)訪問(wèn)策略。   只讀型:對(duì)于從來(lái)不會(huì)修改的數(shù)據(jù),如參考數(shù)據(jù),可以使用這種并發(fā)訪問(wèn)策略。

  事務(wù)型并發(fā)訪問(wèn)策略是事務(wù)隔離級(jí)別最高,只讀型的隔離級(jí)別最低。事務(wù)隔離級(jí)別越高,并發(fā)性能就越低。

  什么樣的數(shù)據(jù)適合存放到第二級(jí)緩存中?

  1、很少被修改的數(shù)據(jù)

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

  3、不會(huì)被并發(fā)訪問(wèn)的數(shù)據(jù)

  4、參考數(shù)據(jù)

  不適合存放到第二級(jí)緩存的數(shù)據(jù)?

  1、經(jīng)常被修改的數(shù)據(jù)

  2、財(cái)務(wù)數(shù)據(jù),絕對(duì)不允許出現(xiàn)并發(fā)

  3、與其他應(yīng)用共享的數(shù)據(jù)。

  Hibernate的二級(jí)緩存

   如前所述,Hibernate提供了兩級(jí)緩存,第一級(jí)是Session的緩存。由于Session對(duì)象的生命周期通常對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)事務(wù)或者一個(gè)應(yīng)用事 務(wù),因此它的緩存是事務(wù)范圍的緩存。第一級(jí)緩存是必需的,不允許而且事實(shí)上也無(wú)法比卸除。在第一級(jí)緩存中,持久化類(lèi)的每個(gè)實(shí)例都具有唯一的OID。

   第二級(jí)緩存是一個(gè)可插拔的的緩存插件,它是由SessionFactory負(fù)責(zé)管理。由于SessionFactory對(duì)象的生命周期和應(yīng)用程序的整個(gè) 過(guò)程對(duì)應(yīng),因此第二級(jí)緩存是進(jìn)程范圍或者集群范圍的緩存。這個(gè)緩存中存放的對(duì)象的松散數(shù)據(jù)。第二級(jí)對(duì)象有可能出現(xiàn)并發(fā)問(wèn)題,因此需要采用適當(dāng)?shù)牟l(fā)訪問(wèn)策 略,該策略為被緩存的數(shù)據(jù)提供了事務(wù)隔離級(jí)別。緩存適配器用于把具體的緩存實(shí)現(xiàn)軟件與Hibernate集成。第二級(jí)緩存是可選的,可以在每個(gè)類(lèi)或每個(gè)集 合的粒度上配置第二級(jí)緩存。

  Hibernate的二級(jí)緩存策略的一般過(guò)程如下:

  1) 條件查詢(xún)的時(shí)候,總是發(fā)出一條select * from table_name where …. (選擇所有字段)這樣的SQL語(yǔ)句查詢(xún)數(shù)據(jù)庫(kù),一次獲得所有的數(shù)據(jù)對(duì)象。

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

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

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

  Hibernate的二級(jí)緩存策略,是針對(duì)于ID查詢(xún)的緩存策略,對(duì)于條件查詢(xún)則毫無(wú)作用。為此,Hibernate提供了針對(duì)條件查詢(xún)的Query緩存。

  Hibernate的Query緩存策略的過(guò)程如下:

  1) Hibernate首先根據(jù)這些信息組成一個(gè)Query Key,Query Key包括條件查詢(xún)的請(qǐng)求一般信息:SQL, SQL需要的參數(shù),記錄范圍(起始位置rowStart,最大記錄個(gè)數(shù)maxRows),等。

  2) Hibernate根據(jù)這個(gè)Query Key到Query緩存中查找對(duì)應(yīng)的結(jié)果列表。如果存在,那么返回這個(gè)結(jié)果列表;如果不存在,查詢(xún)數(shù)據(jù)庫(kù),獲取結(jié)果列表,把整個(gè)結(jié)果列表根據(jù)Query Key放入到Query緩存中。

  3) Query Key中的SQL涉及到一些表名,如果這些表的任何數(shù)據(jù)發(fā)生修改、刪除、增加等操作,這些相關(guān)的Query Key都要從緩存中清空。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产成人高清在线观看 | 国产日产精品一区二区三区四区 | 欧美精品亚洲人成在线观看 | 久久思思爱 | 黄色一级毛片免费看 | 羞羞羞网站 | 久久久久久久久久亚洲 | 黄色av网| 中国美女一级黄色大片 | 91精品国产91久久久久久 | 斗破苍穹在线免费 | 成人在线观看一区二区 | 污片在线观看视频 | 久久精品.com| 亚洲5区| 操嫩草| 草莓福利社区在线 | 天天色狠狠干 | 91av亚洲| 天天看成人免费毛片视频 | 久久精品成人免费国产片桃视频 | 亚洲综合视频网 | 在线看小早川怜子av | 深夜毛片免费看 | 国产三级国产精品国产普男人 | 有色视频在线观看 | 欧美特黄a | 久章草影院 | 日本不卡一区二区在线观看 | 日日草夜夜 | 午夜视频免费在线观看 | 男人的天堂色偷偷 | 国产自在线 | asian裸体佳人pics | 久久人人97超碰国产公开结果 | 亚洲码无人客一区二区三区 | 欧美成年私人网站 | 国产一级中文字幕 | 宅男噜噜噜66国产免费观看 | 国产精品一区自拍 | 91精品国产成人 |