淺談Mybatis二級緩存的缺陷
一級緩存默認(rèn)是開啟的(但是整合了Spring,Mybatis的一級緩存默認(rèn)就失效了)
二級緩存是要手動配置開啟的(二級緩存是mapper級別的緩存,可以跨SqlSession)
Mybatis二級緩存
開啟二級緩存(xml方式):在*Mapper.xml中加入如下代碼
<!--eviction: 清空緩存的策略 readOnly: 是否只讀 flushInterval: 每個(gè)60秒刷新一次緩存 size: 內(nèi)存大小,最多存儲結(jié)果對象或者列表的512個(gè)引用 --> <cache readOnly="true" eviction="FIFO" flushInterval="60000" size="512"/>
緩存清除策略
- LRU – 最近最少使用:移除最長時(shí)間不被使用的對象。
- FIFO – 先進(jìn)先出:按對象進(jìn)入緩存的順序來移除它們。
- SOFT – 軟引用:基于垃圾回收器狀態(tài)和軟引用規(guī)則移除對象。
- WEAK – 弱引用:更積極地基于垃圾收集器狀態(tài)和弱引用規(guī)則移除對象。
兩種方式二選一,如果都配置會報(bào)錯:Caches collection already contains value for com.lixianhe.dao.UserMapper
注意:使用Mybatis二級緩存必須是xml寫SQL語句,不能使用注解寫SQL語句
緩存的執(zhí)行順序
- 先從二級緩存中查詢,二級緩存沒有進(jìn)入SqlSession中查詢
- SqlSession沒有就去數(shù)據(jù)庫查詢,然后存到一級緩存中,查詢完關(guān)閉SqlSession
- 一級緩存再提交給二級緩存
在開啟二級緩存的情況下執(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è)問題對二級緩存來說是一個(gè)無解的問題
因此Mybatis二級緩存的使用用一個(gè)前提,必須保證所有的增刪改查都在同一個(gè)namespace下才行
由于二級緩存的弊端,所以并不建議在實(shí)際生產(chǎn)中使用,而是在外部實(shí)現(xiàn)自己的緩存,如使用Redis做緩存
到此這篇關(guān)于淺談Mybatis二級緩存的缺陷的文章就介紹到這了,更多相關(guān)Mybatis二級緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
@RequestParam?和@RequestBody注解的區(qū)別解析
在 Spring MVC 中,我們可以使用 @RequestParam 和 @RequestBody 來獲取請求參數(shù),但它們在用法和作用上有一些區(qū)別,這篇文章主要介紹了@RequestParam?和@RequestBody注解的區(qū)別,需要的朋友可以參考下2023-06-06攔截器獲取request的值之后,Controller拿不到值的解決
這篇文章主要介紹了攔截器獲取request的值之后,Controller拿不到值的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot + SpringSecurity 短信驗(yàn)證碼登錄功能實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot + SpringSecurity 短信驗(yàn)證碼登錄功能實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06SpringBoot添加自定義攔截器的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot添加自定義攔截器的實(shí)現(xiàn)代碼,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09解析SpringBoot中@Autowire注解的實(shí)現(xiàn)原理
在開發(fā)Java項(xiàng)目時(shí),依賴注入是一種常見的實(shí)現(xiàn)方式,SpringBoot框架通過@Autowired注解來實(shí)現(xiàn)依賴注入的功能,本文將介紹SpringBoot中 Autowired注解實(shí)現(xiàn)的原理2023-06-06IntelliJ?IDEA快速查詢maven依賴關(guān)系圖文教程
Maven提供了來查看依賴關(guān)系,而IDE往往提供了更加便利的方式,比如Eclipse或者IDEA都有類似的功能,下面這篇文章主要給大家介紹了關(guān)于IntelliJ?IDEA快速查詢maven依賴關(guān)系的相關(guān)資料,需要的朋友可以參考下2023-11-11