您好,登錄后才能下訂單哦!
這篇文章主要介紹“Mybatis二級(jí)緩存的缺陷是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Mybatis二級(jí)緩存的缺陷是什么”文章能幫助大家解決問(wèn)題。
一級(jí)緩存默認(rèn)是開(kāi)啟的(但是整合了Spring,Mybatis的一級(jí)緩存默認(rèn)就失效了)
二級(jí)緩存是要手動(dòng)配置開(kāi)啟的(二級(jí)緩存是mapper級(jí)別的緩存,可以跨SqlSession)
開(kāi)啟二級(jí)緩存(xml方式):在*Mapper.xml中加入如下代碼
<!--eviction: 清空緩存的策略 readOnly: 是否只讀 flushInterval: 每個(gè)60秒刷新一次緩存 size: 內(nèi)存大小,最多存儲(chǔ)結(jié)果對(duì)象或者列表的512個(gè)引用 --> <cache readOnly="true" eviction="FIFO" flushInterval="60000" size="512"/>
LRU – 最近最少使用:移除最長(zhǎng)時(shí)間不被使用的對(duì)象。
FIFO – 先進(jìn)先出:按對(duì)象進(jìn)入緩存的順序來(lái)移除它們。
SOFT – 軟引用:基于垃圾回收器狀態(tài)和軟引用規(guī)則移除對(duì)象。
WEAK – 弱引用:更積極地基于垃圾收集器狀態(tài)和弱引用規(guī)則移除對(duì)象。
兩種方式二選一,如果都配置會(huì)報(bào)錯(cuò):Caches collection already contains value for com.lixianhe.dao.UserMapper
注意:使用Mybatis二級(jí)緩存必須是xml寫SQL語(yǔ)句,不能使用注解寫SQL語(yǔ)句
先從二級(jí)緩存中查詢,二級(jí)緩存沒(méi)有進(jìn)入SqlSession中查詢
SqlSession沒(méi)有就去數(shù)據(jù)庫(kù)查詢,然后存到一級(jí)緩存中,查詢完關(guān)閉SqlSession
一級(jí)緩存再提交給二級(jí)緩存
在開(kāi)啟二級(jí)緩存的情況下執(zhí)行一條sql
select colA1, colA2, colB1, colB2 from A, B where ...
A表執(zhí)行了上述的sql
B表更新了字段cloB1,colB2
A表再次執(zhí)行了上述的sql(前提沒(méi)有執(zhí)行insert、update、delete)
A表第二次就查詢出了臟數(shù)據(jù)(B表的數(shù)據(jù)就是臟數(shù)據(jù)),這個(gè)問(wèn)題對(duì)二級(jí)緩存來(lái)說(shuō)是一個(gè)無(wú)解的問(wèn)題
因此Mybatis二級(jí)緩存的使用用一個(gè)前提,必須保證所有的增刪改查都在同一個(gè)namespace下才行
由于二級(jí)緩存的弊端,所以并不建議在實(shí)際生產(chǎn)中使用,而是在外部實(shí)現(xiàn)自己的緩存,如使用Redis做緩存
關(guān)于“Mybatis二級(jí)緩存的缺陷是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。