各位小伙伴
我們今天來分享的是
mybatis 的緩存
緩存小伙伴們應(yīng)該都有了解一點兒吧!就是我們看電影的時候,有時候就會彈出一句,"網(wǎng)速不好,緩存一下再看".或者就是"進(jìn)度君在玩命的加載中...".大致就是這些了,那么今天我們就來一起了解一下mybatis框架的緩存.
Mybatis 緩存
緩存的概念
當(dāng)用戶頻繁查詢某些固定的數(shù)據(jù)時,第一次將這些數(shù)據(jù)從數(shù)據(jù)庫中查詢出來,保存在緩存(內(nèi)存,高速磁盤)中.當(dāng)下次用戶再次查詢這些數(shù)據(jù)時,不用再通過數(shù)據(jù)庫查詢,而是去緩存里面查詢.
減少網(wǎng)絡(luò)連接和數(shù)據(jù)庫查詢帶來的損耗,從而提高我們的查詢效率,減少高并發(fā)訪問帶來的系統(tǒng)性能問題.
MyBatis 的緩存分為一級緩存和二級緩存
如圖所示:
Mybatis 的一級緩存是只在同一個 sqlSession 里面應(yīng)用?Mybatis 的二級緩存可以跨越 sqlSession ,以 mapper 為單位創(chuàng)建,是系統(tǒng)級緩存.
一級緩存
如圖所示:
當(dāng)?shù)谝淮伟l(fā)出 sql 請求的時候, Mybatis 會從數(shù)據(jù)庫查詢,并將結(jié)果存入一級緩存中.當(dāng)在同一個 sqlSession 里面發(fā)出同樣的 sql 查詢請求, Mybatis 會直接從緩存中查找.如果沒有,則從數(shù)據(jù)庫查找.
注意:
MyBatis 默認(rèn)支持一級緩存,不需要另外配置,但是在跟 spring 整合的時候,進(jìn)行 mapper 代理開發(fā)的方式時,mybatis 的一級緩存是不存在的 ,因為代理模板每次調(diào)用完之后都會關(guān)閉sqlSession.?
如果 sqlSession 里面出現(xiàn) commit 操作, sqlSession 中的緩存會被全部清空,避免出現(xiàn)臟讀.
二級緩存
a:Mybatis 的二級緩存是 mapper 級別的,就是說二級緩存是以 Mapper 配置文件的namespace 為單位創(chuàng)建的.
b:Mybatis 的二級緩存需要在 settting 里面加入配置(默認(rèn)是開啟的)
c:需要在 mapper 映射文件加入標(biāo)簽才可以觸發(fā)此映射文件開啟二級緩存.
d:在映射文件用到的查詢對象必須序列化 User.java
e:如果需要禁用某個 statment 的緩存 ,可以在這個 statement 里面單獨設(shè)置 ,比如我們的用戶名和密碼不需要緩存.
好的,我們的二級緩存設(shè)置完成了,現(xiàn)在來測試一下.我們把 sqlsession 關(guān)閉了.這樣就是不用一級緩存了.
我們現(xiàn)在看見的就是二級緩存的效果了
二級緩存的相關(guān)配置
eviction: 緩存的回收策略?默認(rèn)為LRU
????LRU:移除近期最少使用的對象
????FIFO: FIRST INPUT FIRST OUT 按照進(jìn)入的時間移除對象
????SOFT: 軟引用 ,移除基于垃圾回收狀態(tài)和軟引用規(guī)則的對象
????WEAK :弱引用,更積極的移除基于垃圾回收狀態(tài)和弱引用規(guī)則的對象
flushInterval:刷新緩存,默認(rèn)不自動刷新,可以為任意的正整數(shù),單位是毫秒時間 ,在增刪改操作的時候會刷新.
size:緩存被應(yīng)用的數(shù)目,默認(rèn)1024次查詢的結(jié)果
readOnly :緩存的只讀屬性?,默認(rèn)是false,代表緩存不能修改
那么各位小伙伴
今天的分享就到這里了
拜拜