淺談Mybatis二級(jí)緩存的缺陷
一級(jí)緩存默認(rèn)是開啟的(但是整合了Spring,Mybatis的一級(jí)緩存默認(rèn)就失效了)
二級(jí)緩存是要手動(dòng)配置開啟的(二級(jí)緩存是mapper級(jí)別的緩存,可以跨SqlSession)
Mybatis二級(jí)緩存
開啟二級(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ǔ)句
緩存的執(zhí)行順序
- 先從二級(jí)緩存中查詢,二級(jí)緩存沒有進(jìn)入SqlSession中查詢
- SqlSession沒有就去數(shù)據(jù)庫(kù)查詢,然后存到一級(jí)緩存中,查詢完關(guān)閉SqlSession
- 一級(jí)緩存再提交給二級(jí)緩存
在開啟二級(jí)緩存的情況下執(zhí)行一條sql
select colA1, colA2, colB1, colB2 from A, B where ...
A表執(zhí)行了上述的sql
B表更新了字段cloB1,colB2
A表再次執(zhí)行了上述的sql(前提沒有執(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í)緩存的缺陷的文章就介紹到這了,更多相關(guān)Mybatis二級(jí)緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Spring Data JPA的坑點(diǎn)記錄總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于使用Spring Data JPA的一些坑點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
logback的FileAppender文件追加模式和沖突檢測(cè)解讀
這篇文章主要為大家介紹了logback的FileAppender文件追加模式和沖突檢測(cè)解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
SpringBoot如何使用validator框架優(yōu)雅地校驗(yàn)參數(shù)
文章介紹了如何使用SpringValidation進(jìn)行參數(shù)校驗(yàn),包括引入依賴、@requestBody和@requestParam參數(shù)校驗(yàn)、統(tǒng)一異常處理、分組校驗(yàn)、嵌套校驗(yàn)、自定義校驗(yàn)、業(yè)務(wù)規(guī)則校驗(yàn)以及@Valid和@Validated的區(qū)別,同時(shí),列舉了常用的BeanValidation和HibernateValidator注解2025-02-02
Java套接字(Socket)網(wǎng)絡(luò)編程入門
這篇文章主要介紹了Java套接字(Socket)網(wǎng)絡(luò)編程入門,Socket可以理解為是對(duì)TCP/IP協(xié)議的抽象,需要的朋友可以參考下2015-10-10
基于SpringBoot bootstrap.yml配置未生效的解決
這篇文章主要介紹了基于SpringBoot bootstrap.yml配置未生效的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10

