Mybatis | Mybatis 一级缓存、二级缓存、三级自定义缓存(Redis)
Mybatis 一級緩存、二級緩存、三級自定義緩存Redis實(shí)現(xiàn)
- 一、Mybatis 緩存
- 二、一級緩存 SqlSession級別
- 1.如何開啟一級緩存
- 2.什么時候清除緩存?
- 3.什么時候緩存失效?
- 4.存在的問題
- 5.查詢 加事務(wù)與不加事務(wù)
- 三、二級緩存 Mapper級別
- 1.開啟二級緩存
- 2.緩存清除
- 3.存在的問題
- 四、三級緩存 第三方自定義緩存(這里用Redis實(shí)現(xiàn))
- 1.使用 Mybatis整合Redis實(shí)現(xiàn)分布式緩存
- 五、總結(jié)
一、Mybatis 緩存
Mybatis為什么要有緩存?
???????Mybatis 提供緩存當(dāng)然是為了減少了與SQL數(shù)據(jù)庫的I/O交互, 提升查詢效率。
???????在Mybatis中存在兩種緩存,一級緩存與二級緩存。下面我們說說一級緩存與二緩存
二、一級緩存 SqlSession級別
Mybaits 中一級緩存也就做本地緩存,一級緩存是在會話也就是SqlSession層面實(shí)現(xiàn)的,一級緩存的作用范圍是在同一個SqlSession中,不同的SqlSession及時查詢相同的數(shù)據(jù)也不會走緩存。
1.如何開啟一級緩存
???????一級緩存是默認(rèn)開啟的, 需要開啟事務(wù)。不加事務(wù)每次查詢都會創(chuàng)建SqlSession.
2.什么時候清除緩存?
- 當(dāng)執(zhí)行增刪改方法時會清除緩存。
- MyBatis全局配置屬性localCacheScope配置為Statement時,那么完成一次查詢就會清除緩存。
- 是否配置了flushCache=true屬性,如果配置了則會清除一級緩存。
3.什么時候緩存失效?
- SqlSession 需要開啟事務(wù)才會生效。否則每次查詢都壞創(chuàng)建一個新的SqlSession
- 不同的SqlSession 對應(yīng)不同的緩存
- 同一個 SqlSession 查詢條件不同 也會不走緩存。
- 手動清空緩存,調(diào)用SqlSession clearCache()方法。
4.存在的問題
???????在同一個SqlSession中 兩次相同條件查詢中,第一次查詢后 然后手動修改表數(shù)據(jù)或者另一個SqlSession對象修改了數(shù)據(jù)庫或者分布式情況下數(shù)據(jù)發(fā)生了修改 那么第二次查詢是直接走緩存,查詢結(jié)果依舊相同,會存在數(shù)據(jù)不一致問題。
5.查詢 加事務(wù)與不加事務(wù)
加事務(wù) 只創(chuàng)建了一次SqlSession
不加事務(wù) 創(chuàng)建了兩次
三、二級緩存 Mapper級別
Mybatis 二級緩存是mapper級別的 需要手動開啟,他的作用范圍更廣也就是mapper文件的一個命名空間(namespace)中。
1.開啟二級緩存
二級緩存需要手動開啟
2.緩存清除
- 當(dāng)執(zhí)行增刪改方法時會清除緩存。
3.存在的問題
??????? 二級緩存也存在同一級緩存一樣的問題,只不過二級緩存的作用域比一級緩存大,
在同一個命名空間(namespace)中 兩次相同條件查詢中,第一次查詢后 然后手動修改表數(shù)據(jù)或者分布式情況下數(shù)據(jù)發(fā)生了修改 那么再次查詢是直接走緩存,查詢結(jié)果依舊相同,會存在數(shù)據(jù)不一致問題。
四、三級緩存 第三方自定義緩存(這里用Redis實(shí)現(xiàn))
Mybatis 的一級緩存與二級緩存 只適用于單體項(xiàng)目,在分布式服務(wù)或者微服務(wù)架構(gòu)下 都會出現(xiàn)數(shù)據(jù)不一致問題。所以Mybatis 為我們提供了自定義緩存 我們可以集成很多三方中間件來做緩存 這里就那Redis來說一下。
1.使用 Mybatis整合Redis實(shí)現(xiàn)分布式緩存
五、總結(jié)
MyBatis 的一級緩存 二級緩存 都不建議使用,它們只適用于單體項(xiàng)目,現(xiàn)在基本都是分布式或者微服務(wù) 框架使用的話會存在數(shù)據(jù)不一致問題。
在我開發(fā)這幾年,用的都是微服務(wù)架構(gòu)。也沒用過Mybatis 的緩存 都是手動在代碼中做的redis 緩存。手動在代碼中做redis緩存我覺得更靈活。
總結(jié)
以上是生活随笔為你收集整理的Mybatis | Mybatis 一级缓存、二级缓存、三级自定义缓存(Redis)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware vSphere ESX 4
- 下一篇: 【云原生 | Docker 高级篇】03