www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 芯聞號(hào) > 充電吧
[導(dǎo)讀]緩存是介于應(yīng)用程序和物理數(shù)據(jù)源之間,其作用是為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的頻次,從而提高了應(yīng)用的運(yùn)行性能。緩存內(nèi)的數(shù)據(jù)是對物理數(shù)據(jù)源中的數(shù)據(jù)的復(fù)制,應(yīng)用程序在運(yùn)行時(shí)從緩存讀寫數(shù)據(jù),在特定的時(shí)刻或事

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

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

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

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

持久化層的緩存的范圍

  緩存的范圍決定了緩存的生命周期以及可以被誰訪問。緩存的范圍分為三類。

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

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

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

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

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

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

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

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

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

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

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

  只讀型:對于從來不會(huì)修改的數(shù)據(jù),如參考數(shù)據(jù),可以使用這種并發(fā)訪問策略。

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

什么樣的數(shù)據(jù)適合存放到第二級(jí)緩存中?
1 很少被修改的數(shù)據(jù)

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

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

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

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

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

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

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

Hibernate的二級(jí)緩存

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

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

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

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

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

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

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

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

Hibernate的Query緩存策略的過程如下:

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

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

3) Query Key中的SQL涉及到一些表名,如果這些表的任何數(shù)據(jù)發(fā)生修改、刪除、增加等操作,這些相關(guān)的Query Key都要從緩存中清空。
Hibernate的二級(jí)緩存原理非常類似于Jdon框架(可見JF開發(fā)指南)。

雖然原理類似,但是區(qū)別在于:通過Jdon框架可靈活指定緩存位置,如緩存設(shè)置在持久層前面,這就象Hibernate緩存;但是也可以設(shè)置在更前面,如業(yè)務(wù)層前面,而且也可以實(shí)現(xiàn)持久層和業(yè)務(wù)層前的共用一個(gè)緩存,這些都以及在JiveJdon3中實(shí)現(xiàn)。

緩存提前訪問的好處是:表現(xiàn)層的請求不必經(jīng)過業(yè)務(wù)層直接得到緩存,節(jié)省業(yè)務(wù)層開銷,緩存越靠近用戶界面端,性能越好,查詢越頻繁使用,緩存擊中率越高,各方面消耗就越小,最好緩存在客戶端,這也是胖客戶端一個(gè)性能優(yōu)勢。

將對象保存到緩存中必須在持久層實(shí)現(xiàn),但是如果在業(yè)務(wù)層甚至表現(xiàn)層能夠都能操作的緩存和持久層的緩存是同一個(gè)緩存好處就很大。

我們可以將業(yè)務(wù)狀態(tài)保存到緩存中,我曾經(jīng)發(fā)表一篇“狀態(tài)對象:數(shù)據(jù)庫的替代者”(http://www.jdon.com/artichect/state.htm),意思說盡量使用對象狀態(tài),少用數(shù)據(jù)庫,就是把我們的數(shù)據(jù)保存到內(nèi)存中,怎么保存到內(nèi)存中呢?就是保存到緩存中。

如果保存到緩存中只能在持久層觸發(fā),顯然不方便,想像一下我們有一個(gè)對象:如論壇狀態(tài),我不希望這個(gè)對象持久化保存到數(shù)據(jù)庫,只要在內(nèi)存中存在就可以了,如果緩存保存觸發(fā)只在持久層,那就必須強(qiáng)迫我們保存到數(shù)據(jù)庫中(可能Hibernate有這種只保存二級(jí)緩存,不保存到數(shù)據(jù)庫功能,如發(fā)現(xiàn)提供一下),而單獨(dú)直接操作緩存就可以做到這點(diǎn)。

所以,業(yè)務(wù)層特別是業(yè)務(wù)容器能夠訪問到緩存非常重要,這是Jdon框架的又一個(gè)特點(diǎn),目前沒有在spring+Hibernate組合中看到如此精妙構(gòu)思的功能。
Jdon框架帶來的業(yè)務(wù)層能夠操作緩存或Session好處:
1. 自自由確定領(lǐng)域模型的scope, 所有業(yè)務(wù)邏輯可都在業(yè)務(wù)層實(shí)現(xiàn),而不必將一些業(yè)務(wù)代碼(如購物車)分離到表現(xiàn)層如struts的action中實(shí)現(xiàn)(因?yàn)槠渌蚣苤挥性诒憩F(xiàn)層中才能操作到Session,這是spring 1.x本身沒有的),減少代碼在層選擇上的痛苦和分散。

2. 對象狀態(tài)(臨時(shí))只保存緩存中,而不保存到數(shù)據(jù)庫,幾乎對象都有自己的屬性狀態(tài),狀態(tài)頻繁更新是日常應(yīng)用系統(tǒng)特點(diǎn),減少數(shù)據(jù)庫持久操作,提高性能。Hibernate等數(shù)據(jù)庫框架的緩存在這種情況下失效。

3. 緩存越靠近客戶端越快。



本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉