Java高級框架mybatis框架緩存

各位小伙伴

我們今天來分享的是

mybatis 的緩存

緩存小伙伴們應該都有了解一點兒吧!就是我們看電影的時候,有時候就會彈出一句,"網速不好,緩存一下再看".或者就是"進度君在玩命的加載中...".大致就是這些了,那么今天我們就來一起了解一下mybatis框架的緩存.

Mybatis 緩存

緩存的概念

當用戶頻繁查詢某些固定的數據時,第一次將這些數據從數據庫中查詢出來,保存在緩存(內存,高速磁盤)中.當下次用戶再次查詢這些數據時,不用再通過數據庫查詢,而是去緩存里面查詢.

減少網絡連接和數據庫查詢帶來的損耗,從而提高我們的查詢效率,減少高并發訪問帶來的系統性能問題.

MyBatis 的緩存分為一級緩存和二級緩存

如圖所示:

Mybatis 的一級緩存是只在同一個 sqlSession 里面應用?Mybatis 的二級緩存可以跨越 sqlSession ,以 mapper 為單位創建,是系統級緩存.

一級緩存

如圖所示:

當第一次發出 sql 請求的時候, Mybatis 會從數據庫查詢,并將結果存入一級緩存中.當在同一個 sqlSession 里面發出同樣的 sql 查詢請求, Mybatis 會直接從緩存中查找.如果沒有,則從數據庫查找.

注意:

MyBatis 默認支持一級緩存,不需要另外配置,但是在跟 spring 整合的時候,進行 mapper 代理開發的方式時,mybatis 的一級緩存是不存在的 ,因為代理模板每次調用完之后都會關閉sqlSession.?

如果 sqlSession 里面出現 commit 操作, sqlSession 中的緩存會被全部清空,避免出現臟讀.

二級緩存

a:Mybatis 的二級緩存是 mapper 級別的,就是說二級緩存是以 Mapper 配置文件的namespace 為單位創建的.

b:Mybatis 的二級緩存需要在 settting 里面加入配置(默認是開啟的)


c:需要在 mapper 映射文件加入標簽才可以觸發此映射文件開啟二級緩存.

d:在映射文件用到的查詢對象必須序列化 User.java

e:如果需要禁用某個 statment 的緩存 ,可以在這個 statement 里面單獨設置 ,比如我們的用戶名和密碼不需要緩存.

好的,我們的二級緩存設置完成了,現在來測試一下.我們把 sqlsession 關閉了.這樣就是不用一級緩存了.

我們現在看見的就是二級緩存的效果了

二級緩存的相關配置

eviction: 緩存的回收策略?默認為LRU

????LRU:移除近期最少使用的對象

????FIFO: FIRST INPUT FIRST OUT 按照進入的時間移除對象

????SOFT: 軟引用 ,移除基于垃圾回收狀態和軟引用規則的對象

????WEAK :弱引用,更積極的移除基于垃圾回收狀態和弱引用規則的對象

flushInterval:刷新緩存,默認不自動刷新,可以為任意的正整數,單位是毫秒時間 ,在增刪改操作的時候會刷新.

size:緩存被應用的數目,默認1024次查詢的結果

readOnly :緩存的只讀屬性?,默認是false,代表緩存不能修改

那么各位小伙伴

今天的分享就到這里了

拜拜

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容