一級快取和二級快取區別

2021-07-16 18:49:57 字數 2634 閱讀 9840

一級快取和二級快取區別

一級快取:

就是session級別的快取。乙個session做了乙個查詢操作,它會把這個操作的結果放在一級快取中。

如果短時間內這個session(一定要同乙個session)又做了同乙個操作,那麼hibernate直接從一級快取中拿,而不會再去連資料庫,取資料。

它是內建的事務範圍的快取,不能被解除安裝。

二級快取:

就是sessionfactory級別的快取。顧名思義,就是查詢的時候會把查詢結果快取到二級快取中。

如果同乙個sessionfactory建立的某個session執行了相同的操作,hibernate就會從二級快取中拿結果,而不會再去連線資料庫。

這是可選的外掛程式式的快取,在預設情況下,sessionfactory不會啟用這個外掛程式。

可以在每個類或每個集合的粒度上配置。快取介面卡用於把具體的快取實現軟體與hibernate整合。

嚴格意義上說,sessionfactory快取分為兩類:內建快取和外接快取。我們通常意義上說的二級快取是指外接快取。

內建快取與session級別快取實現方式相似。前者是sessionfactory物件的一些集合屬性包含的資料,後者是指session的一些集合屬性包含的資料

sessionfactory的內建快取中存放了對映元資料和預定義sql語句。

對映元資料是對映檔案中資料的拷貝;

而預定義sql語句是在hibernate初始化階段根據對映元資料推導出來。

sessionfactory的內建快取是唯讀的,應用程式不能修改快取中的對映元資料和預定義sql語句,因此sessionfactory不需要進行內建快取與對映檔案的同步。

hibernate的這兩級快取都位於持久化層,存放的都是資料庫資料的拷貝。

快取的兩個特性:

快取的範圍

快取的併發訪問策略

1、快取的範圍

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

事務範圍

程序範圍

集群範圍

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

事務範圍的快取是持久化層的第一級快取,通常它是必需的;程序範圍或集群範圍的快取是持久化層的第二級快取,通常是可選的。

2、快取的併發訪問策略

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

在程序範圍或集群範圍的快取,即第二級快取,會出現併發問題。

因此可以設定以下四種型別的併發訪問策略,每一種策略對應一種事務隔離級別。

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

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

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

b 讀寫型:提供了read committed事務隔離級別。僅僅在非集群的環境中適用。

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

c 非嚴格讀寫型:不保證快取與資料庫中資料的一致性。

如果存在兩個事務同時訪問快取中相同資料的可能,必須為該資料配置乙個很短的資料過期時間,從而盡量避免髒讀。

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

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

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

1、很少被修改的資料

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

3、不會被併發訪問的資料

4、參考資料

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

1、經常被修改的資料

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

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

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

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

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

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

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

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

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都要從快取中清空。

快取(一級快取和二級快取)

快取可以將資料儲存在記憶體中,是網際網路系統常常用到的。目前流行的快取伺服器有 mongodb redis ehcache 等。快取是在計算機記憶體上儲存的資料,讀取時無需再從磁碟讀入,因此具備快速讀取和使用的特點。和大多數持久化框架一樣,mybatis 提供了一級快取和二級快取的支援。預設情況下,...

一級快取和二級快取

引自 許多人認為,快取 是記憶體的一部分 許多技術文章都是這樣教授的 但是還是有很多人不知道快取在什麼地方,快取是做什麼用的 其實,快取是cpu的一部分,它存在於cpu中 cpu訪問資料的速度非常的快,一秒鐘能夠訪問 處理十億條指令和資料 術語 cpu主頻1g 而記憶體就慢很多,快的記憶體能夠達到幾...

一級快取,二級快取

首先補充下cpu的知識 cpu也就是 處理器,相當於計算機的大腦 cpu是一塊超大規模的積體電路,是一台計算機的運算核心 core 和控制核心 control unit cpu功能主要是解釋計算機指令以及處理計算機軟體中的資料 處理器主要包括運算器 算術邏輯運算單元,alu,arithmetic l...