什麼是hibernate中的二級快取

時間 2022-02-08 05:38:23

1樓:匿名使用者

第一級別的快取是session級別的快取,是屬於事務範圍的快取,由hibernate管理,一般無需進行干預。第二級別的快取是sessionfactory級別的快取,是屬於程序範圍的快取。

二級快取也分為了兩種

內建快取:hibernate自帶的,不可解除安裝,通常在hibernate的初始化階段,hibernate會把對映元資料和預定義的sql語句放置到sessionfactory的快取中。該內建快取是唯讀的。

外接快取:通常說的二級快取也就是外接快取,在預設情況下sessionfactory不會啟用這個快取外掛程式,外接快取中的資料是資料庫資料的複製,外接快取的物理介質可以是記憶體或者硬碟。

hibernate二級快取的結構

2.併發訪問策略

transactional

(事務型)

僅在受管理的環境中適用

提供repeatable read事務隔離級別

適用經常被讀,很少修改的資料

可以防止髒讀和不可重複讀的併發問題

快取支援事務,發生異常的時候,快取也能夠回滾

read-write

(讀寫型)

提供read committed事務隔離級別

在非集群的環境中適用

適用經常被讀,很少修改的資料

可以防止髒讀

更新快取的時候會鎖定快取中的資料

nonstrict-read-write

(非嚴格讀寫型)

適用極少被修改,偶爾允許髒讀的資料(兩個事務同時修改資料的情況很少見)

不保證快取和資料庫中資料的一致性

為快取資料設定很短的過期時間,從而盡量避免髒讀

不鎖定快取中的資料

read-only

(唯讀型)

適用從來不會被修改的資料(如參考資料)

在此模式下,如果對資料進行更新操作,會有異常

事務隔離級別低,併發效能高

在集群環境中也能完美運作

分析:通過上述**分析如下

適合放入二級快取中資料

很少被修改

不是很重要的資料,允許出現偶爾的併發問題

不適合放入二級快取中的資料

經常被修改

財務資料,絕對不允許出現併發問題

與其他應用資料共享的資料

2樓:匿名使用者

快取是介於應用程式和物理資料來源之間,其作用是為了降低應用程式對物理資料來源訪問的頻次,從而提高了應用的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料。

快取的介質一般是記憶體,所以讀寫速度很快。但如果快取中存放的資料量非常大時,也會用硬碟作為快取介質。快取的實現不僅僅要考慮儲存的介質,還要考慮到管理快取的併發訪問和快取資料的生命週期。

hibernate的快取包括session的快取和sessionfactory的快取,其中sessionfactory的快取又可以分為兩類:內建快取和外接快取。session的快取是內建的,不能被解除安裝,也被稱為hibernate的第一級快取。

sessionfactory的內建快取和session的快取在實現方式上比較相似,前者是sessionfactory物件的一些集合屬性包含的資料,後者是指session的一些集合屬性包含的資料。sessionfactory的內建快取中存放了對映元資料和預定義sql語句,對映元資料是對映檔案中資料的拷貝,而預定義sql語句是在hibernate初始化階段根據對映元資料推導出來,sessionfactory的內建快取是唯讀的,應用程式不能修改快取中的對映元資料和預定義sql語句,因此sessionfactory不需要進行內建快取與對映檔案的同步。sessionfactory的外接快取是乙個可配置的外掛程式。

在預設情況下,sessionfactory不會啟用這個外掛程式。外接快取的資料是資料庫資料的拷貝,外接快取的介質可以是記憶體或者硬碟。sessionfactory的外接快取也被稱為hibernate的第二級快取。

hibernate的這兩級快取都位於持久化層,存放的都是資料庫資料的拷貝,那麼它們之間的區別是什麼呢?為了理解二者的區別,需要深入理解持久化層的快取的兩個特性:快取的範圍和快取的併發訪問策略。

持久化層的快取的範圍

快取的範圍決定了快取的生命週期以及可以被誰訪問。快取的範圍分為三類。

1 事務範圍:快取只能被當前事務訪問。快取的生命週期依賴於事務的生命週期,當事務結束時,快取也就結束生命週期。

在此範圍下,快取的介質是記憶體。事務可以是資料庫事務或者應用事務,每個事務都有獨自的快取,快取內的資料通常採用相互關聯的的物件形式。

2 程序範圍:快取被程序內的所有事務共享。這些事務有可能是併發訪問快取,因此必須對快取採取必要的事務隔離機制。

快取的生命週期依賴於程序的生命週期,程序結束時,快取也就結束了生命週期。程序範圍的快取可能會存放大量的資料,所以存放的介質可以是記憶體或硬碟。快取內的資料既可以是相互關聯的物件形式也可以是物件的鬆散資料形式。

鬆散的物件資料形式有點類似於物件的序列化資料,但是物件分解為鬆散的演算法比物件序列化的演算法要求更快。

3 集群範圍:在集群環境中,快取被乙個機器或者多個機器的程序共享。快取中的資料被複製到集群環境中的每個程序節點,程序間通過遠端通訊來保證快取中的資料的一致性,快取中的資料通常採用物件的鬆散資料形式。

對大多數應用來說,應該慎重地考慮是否需要使用集群範圍的快取,因為訪問的速度不一定會比直接訪問資料庫資料的速度快多少。

持久化層可以提供多種範圍的快取。如果在事務範圍的快取中沒有查到相應的資料,還可以到程序範圍或集群範圍的快取內查詢,如果還是沒有查到,那麼只有到資料庫中查詢。事務範圍的快取是持久化層的第一級快取,通常它是必需的;程序範圍或集群範圍的快取是持久化層的第二級快取,通常是可選的。

持久化層的快取的併發訪問策略

當多個併發的事務同時訪問持久化層的快取的相同資料時,會引起併發問題,必須採用必要的事務隔離措施。

在程序範圍或集群範圍的快取,即第二級快取,會出現併發問題。因此可以設定以下四種型別的併發訪問策略,每一種策略對應一種事務隔離級別。

事務型:僅僅在受管理環境中適用。它提供了repeatable read事務隔離級別。

對於經常被讀但很少修改的資料,可以採用這種隔離型別,因為它可以防止髒讀和不可重複讀這類的併發問題。

讀寫型:提供了read committed事務隔離級別。僅僅在非集群的環境中適用。對於經常被讀但很少修改的資料,可以採用這種隔離型別,因為它可以防止髒讀這類的併發問題。

非嚴格讀寫型:不保證快取與資料庫中資料的一致性。如果存在兩個事務同時訪問快取中相同資料的可能,必須為該資料配置乙個很短的資料過期時間,從而盡量避免髒讀。

對於極少被修改,並且允許偶爾髒讀的資料,可以採用這種併發訪問策略。

唯讀型:對於從來不會修改的資料,如參考資料,可以使用這種併發訪問策略。

事務型併發訪問策略是事務隔離級別最高,唯讀型的隔離級別最低。事務隔離級別越高,併發效能就越低。

什麼樣的資料適合存放到第二級快取中?

1 很少被修改的資料

2 不是很重要的資料,允許出現偶爾併發的資料

3 不會被併發訪問的資料

4 參考資料

不適合存放到第二級快取的資料?

1 經常被修改的資料

2 財務資料,絕對不允許出現併發

3 與其他應用共享的資料。

hibernate的二級快取

如前所述,hibernate提供了兩級快取,第一級是session的快取。由於session物件的生命週期通常對應乙個資料庫事務或者乙個應用事務,因此它的快取是事務範圍的快取。第一級快取是必需的,不允許而且事實上也無法比卸除。

在第一級快取中,持久化類的每個例項都具有唯一的oid。

第二級快取是乙個可插拔的的快取外掛程式,它是由sessionfactory負責管理。由於sessionfactory物件的生命週期和應用程式的整個過程對應,因此第二級快取是程序範圍或者集群範圍的快取。這個快取中存放的物件的鬆散資料。

第二級物件有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略為被快取的資料提供了事務隔離級別。快取介面卡用於把具體的快取實現軟體與hibernate整合。第二級快取是可選的,可以在每個類或每個集合的粒度上配置第二級快取。

hibernate的二級快取策略的一般過程如下:

1) 條件查詢的時候,總是發出一條select * from table_name where …. (選擇所有字段)這樣的sql語句查詢資料庫,一次獲得所有的資料物件。

2) 把獲得的所有資料物件根據id放入到第二級快取中。

3) 當hibernate根據id訪問資料物件的時候,首先從session一級快取中查;查不到,如果配置了二級快取,那麼從二級快取中查;查不到,再查詢資料庫,把結果按照id放入到快取。

4) 刪除、更新、增加資料的時候,同時更新快取。

hibernate的二級快取策略,是針對於id查詢的快取策略,對於條件查詢則毫無作用。為此,hibernate提供了針對條件查詢的query快取。

hibernate的query快取策略的過程如下:

1) hibernate首先根據這些資訊組成乙個query key,query key包括條件查詢的請求一般資訊:sql, sql需要的引數,記錄範圍(起始位置rowstart,最大記錄個數maxrows),等。

2) hibernate根據這個query key到query快取中查詢對應的結果列表。如果存在,那麼返回這個結果列表;如果不存在,查詢資料庫,獲取結果列表,把整個結果列表根據query key放入到query快取中。

3) query key中的sql涉及到一些表名,如果這些表的任何資料發生修改、刪除、增加等操作,這些相關的query key都要從快取中清空。

路面基層材料二灰碎石中的二灰是指什麼意思

二灰碎石是基層。路面的結構層主要有面層 基層和墊層。面層位於整個路面結構的最上層。它直接承受行車荷載的垂直力 水平力 以及車身後所產生的真空吸力的反覆作用,同時受到降雨和氣溫變化的不利影響,是最直接地反映路面使用效能的一層。市政道路底基層的材料一般用二灰碎石,還是二灰土?二灰碎石基層學名叫石灰粉煤灰...

你是松陽二中畢業的嗎。聽說二中很亂。裡面很多混混是不是真的啊

我是16年畢業的,真的過了非常開心的三年。上學之前也是有聽說很亂,但是並沒有哦。混混肯定是有的,但是你會發現大家都會把不好好學習的人叫做混混。讀書的時候確實接觸過很多人說的 混混 學生,其實大家本質不壞,只是比起好學生更加不會掩飾自己,說話做事更直,不過腦而已,內心還是很友好的。我以前跑操摔倒還是他...

排球中的接應二傳是什麼意思,排球中的接應二傳是什麼意思?主要是什麼任務?

接應二傳 故名思義,其主要任務是在過去的 四二 配備中除了主二傳的另乙個二傳手,同時擔負著攻手的任務。接應就是在主二傳來不及或在主二傳參與了防守的時候她來 接應 一下,因此而得名。而後來經過多年技戰術的發展,接應二傳 的二傳的職能漸漸削弱,而攻手的作用漸漸加強,彷彿只是乙個攻手了。而現在我們所採取的...

排球中為什麼說二傳手是球隊的靈魂人物

二傳手也稱 託手 排球運動比賽隊員的職責分工。指接對方來球後專門擔任第二次傳球組織進攻的隊員。是場上組織進攻 實施戰術的組織者。要求除有嫻熟的二傳技術外,還善於隨機應變,團結隊友,發揮全體隊員的特點以及組織本隊的進攻力量。應意志堅強 頭腦冷靜 視野寬廣和具有很強的戰術意識以及資徹作戰意圖的決心。通常...

在宇宙中地球是獨一無二的嗎,地球是獨一無二的嗎?宇宙中會不會隱藏著第二個地球?

專門研究地外生命的天文學家從來沒有成功地捕獲到來自外星的訊號,考慮到財政問題,飛碟的研究已在政治家中不受歡迎,他們近期取消了美國國家航空和航天局 nasa 的地球外智慧型生物的研究計畫。另外乙個計畫可能更切實可行一些 尋找類似地球的行星而不是外星人。美國國家航空和航天管理局曾有相當長的一段時間對類似...