現實分布式項目中會不會開啟mybatis的二級緩存?
在分布式項目中,是否開啟MyBatis的二級緩存需結合具體場景和技術方案綜合評估。
以下是關鍵考量因素:
一、默認二級緩存的局限性
- 隔離性問題:MyBatis默認的二級緩存基于HashMap實現,
屬于本地緩存,不同節點間的緩存數據無法共享
,可能導致集群環境下
的數據不一致或臟讀問題。 - 緩存刷新機制:默認緩存采用
“全量清空”
策略,任何更新操作
會清空對應namespace下的所有緩存,可能引發緩存雪崩
。 - 序列化要求:實體類必須實現
Serializable
接口,增加了開發約束。
二、分布式場景下的替代方案
-
Redis集成
- 通過自定義緩存實現(如
MybatisRedisCache
),將二級緩存替換為Redis等分布式緩存,解決數據共享問題。 - 需額外處理緩存過期策略、序列化兼容性等問題。
- 通過自定義緩存實現(如
-
Spring Cache抽象
- 使用
@Cacheable
等注解結合Redis,實現更靈活的分布式緩存管理,避免直接依賴MyBatis緩存機制。
- 使用
三、實際應用建議
- 高并發讀場景:若查詢頻繁且數據更新較少,可開啟分布式二級緩存(
如Redis
),但需配合合理的TTL和一致性策略。 - 強一致性要求:若業務對數據實時性要求高(如金融交易),
建議關閉二級緩存
,直接依賴數據庫
。 - 混合架構:可結合本地緩存(
如Caffeine
)作為一級緩存,Redis
作為二級緩存,平衡性能與一致性。
四、典型配置示例
<!-- MyBatis配置開啟二級緩存 -->
<settings><setting name="cacheEnabled" value="true"/>
</settings><!-- Mapper中指定Redis緩存實現 -->
<cache type="com.example.MybatisRedisCache"/>
綜上,分布式項目中通常不會直接使用MyBatis默認二級緩存
,而是通過自定義分布式緩存(如redis)
或框架級方案(如Spring Cache)實現類似功能。
引用鏈接:
1.為什么mybatis默認不開啟二級緩存? - 學亮編程手記
2.【SpringBoot+MyBatis】二級緩存以及使用Redis緩存數據 - CSDN博客
3.Mybatis自定義分布式二級緩存實現與遇到的一些問題解決方案! - 博客園
4.HoRain云–MyBatis一級緩存、二級緩存詳解:正確理解緩存機制與實戰應用 - HoRain 云助手
5.Redis實現Mybatis的二級緩存 - CSDN
6.分布式數據之緩存技術,看這一篇就夠了 - CSDN下載
7.使用Spring Cache優雅的實現分布式二級緩存! - CSDN博客
8.Spring Boot 的 3 種二級緩存落地方案 - CSDN博客
9.MyBatis Plus整合Redis實現分布式二級緩存的問題 - 腳本之家
10.《從Java面試題來看源碼》,項目中使用 Mybatis 緩存嗎?為什么項目中不用 Mybatis 的二級緩存? - 騰訊云
11.MyBatis之緩存避坑: MyBatis的一級緩存、二級緩存的實現分析與分布式環境下數據一致性問題 - 騰訊云
12.MyBatis Plus整合Redis實現分布式二級緩存 - CSDN博客
13.MyBatis的二級緩存整合redis - 唐有煒
14.MyBatis二級緩存深度解析:從入門到實戰,看這篇就夠了! - xuanyi.blog.csdn.net
15.【MyBatis學習13】MyBatis中的二級緩存[通俗易懂] - 騰訊云
16.mybatis的一級緩存和二級緩存 - CSDN博客
17.mybatis+redis實現分布式緩存+緩存面試題 - CSDN博客
18.后端:MyBatis緩存知識介紹 - 騰訊云
19.🚀 MyBatis緩存機制揭秘 🔍 - 此刻的雨一落便是長久
20.關于MyBatis緩存你不知道的事 - 千鋒教育
21.Mybatis緩存機制(二級緩存) - 楊京京
22.Spring Boot 集成 Redis 配置 MyBatis 二級緩存 - 阿甘
23.吃透MyBatis面試八股文 - 程序員大彬
24.MyBatis框架詳解:從基礎到實戰的全棧指南 - Arvin
Mybatis有多少級緩存?
MyBatis 提供兩級緩存機制,用于優化數據庫查詢性能。
具體如下:
1. 一級緩存
- 作用域:
SqlSession
級別,默認開啟且無法關閉。 - 生命周期:與
SqlSession
綁定,當執行flush()
、close()
、事務提交或回滾時,緩存自動清空。 - 特點:
- 同一
SqlSession
內,重復執行相同 SQL(參數、方法、Mapper 接口一致)會直接命中緩存,避免重復查詢數據庫。 - 執行增刪改(DML)操作或手動調用
clearCache()
會立即清空當前會話的所有緩存。
- 同一
2. 二級緩存
- 作用域:
Mapper
級別(namespace
作用域),默認關閉,需手動開啟。 - 開啟條件:
- 全局配置中啟用緩存(
<setting name="cacheEnabled" value="true"/>
)。 - 實體類實現
Serializable
序列化接口。 - 映射文件中添加
<cache/>
標簽。
- 全局配置中啟用緩存(
- 查詢順序:
優先檢查二級緩存 → 再查一級緩存 → 最后訪問數據庫。 - 失效機制:
同namespace
下的 DML 操作會清空該 Mapper 的所有緩存;可通過useCache="false"
禁用特定查詢的緩存。
?? 注意事項
- 性能與一致性:
一級緩存響應快但作用域有限,二級緩存可跨會話但需處理數據一致性問題;分布式場景建議結合 Redis 等第三方緩存。 - 適用場景:
高頻查詢且數據變動少時適合二級緩存;短事務或單次操作頻繁查詢適合一級緩存。
兩級緩存協同工作,構成 MyBatis 完整的緩存體系,可顯著減少數據庫壓力,但需根據業務需求權衡實時性與性能。
引用鏈接:
1.Mybatis一級二級緩存詳解 - 度小視
2.Mybatis一級緩存與二級緩存詳解 - 度小視
3.Mybatis緩存機制詳解:一級與二級緩存的區別 - 無名指的心愿
4.【Java面試】阿里二面,講一下Mybatis里的緩存機制?請看Mic老師是如何替你解答的! - 嗶哩嗶哩
5.MyBatis 一級緩存與二級緩存_mybatis一級緩存和二級緩存-CSDN博客 - CSDN博客
6.深入解析,MyBatis的一二級緩存 - CSDN博客
7.【Java面試】阿里一面:MyBatis緩存機制的理解以及優缺點是什么? - 嗶哩嗶哩
8.【2025Java最新大廠面試題】7天刷完7月面試、跳槽拿offer就穩啦!!包括Java基礎/并發編程/JVM/Mysql/Spring/Redis等等! - 嗶哩嗶哩
9.逼自己6月刷完這100集《2025Java面試題》,啃透這4個重點,offer拿到手軟!|視頻含代碼講解! - 嗶哩嗶哩
10.數據庫常見面試題:聊聊Mybatis中的一級緩存,二級緩存 - 嗶哩嗶哩
11.Mybatis源碼解析(十):一級緩存和二級緩存 - 騰訊云
12.MyBatis之緩存避坑: MyBatis的一級緩存、二級緩存的實現分析與分布式環境下數據一致性問題 - 騰訊云
13.HoRain云–MyBatis一級緩存、二級緩存詳解:正確理解緩存機制與實戰應用 - HoRain 云助手
14.MyBatis中一級緩存和二級緩存的區別 - 腳本之家
15.詳解Mybatis一級緩存和二級緩存 - 博客園
16.Mybatis中的一級緩存與二級緩存詳解 - 百度開發者中心
17.MyBatis中的一級、二級緩存機制詳解 - 百度開發者中心
18.MyBatis的緩存機制 - CSDN博客
19.Mysql–實戰篇–mybatis cache(一級緩存,二級緩存,子查詢主鍵主查詢全部,查詢條件加索引,覆蓋索引等) - CSDN博客
20.mybatis緩存詳解 - 騰訊云
21.MyBatis:緩存機制詳解 - 騰訊云
MyBatis二級緩存有哪些失效情況?
MyBatis二級緩存的失效主要涉及配置、操作、事務及環境四類場景,具體如下:
🔧 一、配置或條件缺失導致失效
- 未開啟全局緩存
全局配置中若未設置<setting name="cacheEnabled" value="true"/>
,二級緩存完全禁用。 - Mapper未配置
<cache/>
標簽
單個Mapper需顯式添加<cache/>
標簽,否則該命名空間(namespace)下的查詢不啟用二級緩存。 - 實體類未序列化
查詢結果對應的實體類未實現Serializable
接口時,緩存數據無法正確存儲。 - 查詢方法禁用緩存
在<select>
標簽中設置useCache="false"
,該查詢結果不進入二級緩存。
🔄 二、數據變更操作導致失效
- 同namespace的DML操作
執行同Mapper下的INSERT
/UPDATE
/DELETE
語句后,該命名空間下所有二級緩存數據立即清空。 - 配置強制刷新
flushCache=true
若查詢語句配置flushCache="true"
,執行時會同時清空一、二級緩存(通常不建議用于查詢)。 - 手動清空緩存
調用SqlSession.clearCache()
或通過代碼觸發緩存管理器(如Cache
對象)的清空操作。
? 三、事務或會話行為導致失效
- 會話未提交或關閉
二級緩存僅在SqlSession
執行commit()
、close()
后生效,未提交的查詢數據不會刷入緩存。 - 跨SqlSession的并發問題
一個會話提交數據更新后,其他會話可能因緩存未同步而讀到舊數據(需結合事務隔離級別處理)。
🌐 四、分布式環境失效場景
- 多節點緩存不一致
集群部署時,單節點更新數據后,其他節點的二級緩存不會自動失效,導致臟讀。 - 第三方緩存未集成
若使用Redis等中央緩存替代默認二級緩存,但未正確配置同步機制,可能引發數據不一致。
📊 高頻失效場景總結
場景類型 | 具體操作 | 失效范圍 |
---|---|---|
同namespace寫操作 | INSERT/UPDATE/DELETE | 整個Mapper緩存清空 |
會話生命周期異常 | SqlSession未commit/close | 新數據無法存入緩存 |
序列化缺失 | 實體類未實現Serializable | 緩存存儲失敗 |
分布式環境更新 | 單節點數據更新 | 其他節點緩存未同步失效 |
💡 應對建議
- 強制刷新配置:對實時性要求高的查詢,顯式設置
flushCache="true"
(慎用); - 禁用二級緩存:分布式場景建議關閉二級緩存(配置
cacheEnabled="false"
或<cache blocking="true"/>
),改用Redis等集中式緩存; - 測試驗證:通過日志監控緩存命中率(如
LoggingCache
包裝類)。
引用鏈接:
1.HoRain云–MyBatis一級緩存、二級緩存詳解:正確理解緩存機制與實戰應用 - HoRain 云助手
2.MyBatis緩存機制(一級/二級緩存失效場景) - 51CTO博客
3.Mybatis緩存機制 - CSDN博客
4.35. MyBatis中的緩存失效機制是如何工作的? - CSDN博客
5.MyBatis 中的緩存失效是什么時候發生的 - www.xth8013.com
6.Mybatis源碼解析(十):一級緩存和二級緩存 - 騰訊云
7.詳解Mybatis一級緩存和二級緩存 - 博客園
8.【MyBatis】MyBatis的緩存 - CSDN博客
9.Mybatis二級緩存失效及二級緩存使用簡介 - CSDN博客
10.Mybatis 緩存原理及失效情況解析 - 腳本之家
11.MyBatis中二級緩存和其失效的一種情況 - 博客園
12.解鎖MyBatis 緩存:深入剖析原理與典型實現示例展示 - 跟我從零開始學編程
13.Mybatis插件失效背后真正你不知道的原因??? - 嗶哩嗶哩
14.mybatis的二級緩存使用以及禁用 - CSDN博客
15.【為什么要禁用mybatis二級緩存?】 - CSDN博客
16.mysql 禁用mybatis緩存 - 51CTO博客
17.spring boot 關閉mybatis框架一二級本地緩存 - 51CTO博客
18.【MyBatis學習13】MyBatis中的二級緩存[通俗易懂] - 騰訊云
19.21Mybatis中緩存機制_二級緩存失效情況 - 嗶哩嗶哩
20.【Java面試】阿里一面:MyBatis緩存機制的理解以及優缺點是什么? - 嗶哩嗶哩
21.springboot mybatisplus 刪除時二級緩存未刷新 mybatis二級緩存臟數據 - 51CTO博客
22.Mybatis中一級緩存和二級緩存使用詳解 - 阿里云開發者社區
23.MyBatis 一級緩存與二級緩存_mybatis一級緩存和二級緩存-CSDN博客 - CSDN博客
24.MyBatis知識匯總(第十篇)【詳解】MyBatis的緩存機制,一級緩存+失效的3種情況,二級緩存,詳解,實例,注意事項 - 51CTO博客
25.十三、MyBatis緩存 - antiai
26.springboot mybatis緩存失效 - 51CTO博客
27.MyBatis緩存揭秘:兩級并存 - 七安Melody會彤彤
28.MyBatis 的緩存機制 - RainbowSea
29.圖解| 聊聊 MyBatis 緩存 - 悟空聊架構
30.關于MyBatis緩存你不知道的事 - 千鋒Java學習站
31.Mybatis最全筆記知識點 - 小狐貍學java
32.spring mybatis 緩存失效原因 mybatis緩存key - 51CTO博客
33.mybatis緩存機制詳解 - 鴻鵠之愿燕雀難解
34.mybatis 二級緩存失效_Mybatis09緩存 - CSDN博客
35.二級緩存失效_MyBatis 中的一級和二級緩存 - CSDN博客
36.由Mybatis 源碼暢談軟件設計(八):從根上理解 Mybatis 二級緩存 - 京東云
37.MyBatis一級緩存和二級緩存詳解 - 胖乎乎的鯨魚喜歡藍莓
MyBatis二級緩存有什么用?
MyBatis二級緩存的核心作用是跨SqlSession
共享高頻查詢數據,顯著減少數據庫訪問壓力并提升查詢性能。其主要價值體現在以下場景:
🔥 核心作用
-
減少數據庫訪問
當多個SqlSession
重復查詢相同數據(如商品信息、配置表)時,二級緩存將結果存儲在內存中,后續查詢直接命中緩存,避免重復訪問數據庫、。💎 典型場景:高并發下頻繁讀取靜態數據(如省份列表、系統參數)、。
-
加速復雜查詢響應
對多表關聯、聚合計算等耗時查詢,首次執行后結果存入二級緩存,后續相同查詢直接從內存返回結果,跳過SQL解析與磁盤I/O,響應速度提升數倍、。 -
跨會話數據共享
不同用戶(不同SqlSession
)訪問相同數據時,二級緩存允許直接復用已緩存結果,消除重復查詢、。例:用戶A查詢訂單詳情后,用戶B查詢同一訂單可直接讀緩存。
?? 適用邊界(需結合業務設計)
適用場景 | 不適用場景 |
---|---|
讀多寫少(如配置表、歷史數據) | 寫多讀少(如庫存、交易流水) |
數據一致性要求較低 | 強一致性場景(如支付狀態) |
單機或集中式部署 | 分布式集群未同步緩存、 |
? 性能優化對比
緩存層級 | 作用范圍 | 性能增益點 | 瓶頸 |
---|---|---|---|
一級緩存 | 單會話內 | 避免會話內重復查詢 | 會話結束即失效 |
二級緩存 | 全局跨會話 | 減少跨會話重復查詢 | 分布式環境需額外集成 |
📌 關鍵建議:
- 對更新頻繁的數據,可通過
<cache flushInterval="600000">
設置緩存自動刷新間隔;分布式場景建議 關閉 默認二級緩存,改用 Redis 等集中式緩存。
引用鏈接:
1.【MyBatis學習13】MyBatis中的二級緩存[通俗易懂] - 騰訊云
2.mybatis底層為什么設計二層緩存? - CSDN博客
3.Mybatis源碼解析(十):一級緩存和二級緩存 - 騰訊云
4.MyBatis的一級緩存和二級緩存以及優點說明 - 腳本之家
5.MyBatis緩存揭秘:性能翻倍 - 皮丘卡不搶點
6.Mybatis中的一級二級緩存掃盲 - CSDN博客
7.MyBatis 一級緩存與二級緩存_mybatis一級緩存和二級緩存-CSDN博客 - CSDN博客
8.mybatis二級緩存 - 小白
9.2024 springboot mybatis plus redis 二級緩存 mybatis二級緩存弊端 - 51CTO博客
10.Mybatis中的一級、二級緩存是怎么實現的 - 格物信息
11.MyBatis一級緩存和二級緩存詳解 - 胖乎乎的鯨魚喜歡藍莓
12.mybatis 詳解 一級緩存、二級緩存 - 騰訊云
13.MyBatis緩存機制(一級緩存,二級緩存) - 騰訊云
14.MyBatis 有哪些緩存? 一級緩存和二級緩存有什么區別? - CSDN博客
15.介紹一下MyBatis緩存? - CSDN博客
16.MyBatis中一級緩存和二級緩存的區別 - 腳本之家
17.Mybatis緩存的使用(Mybatis一級、二級緩存)_mybatis一級緩存和二級緩存應用場景-CSDN博客 - CSDN博客
18.Spring Boot 整合 MyBatis 中使用一級緩存與二級緩存詳解(含完整示例) - CSDN博客
19.由Mybatis 源碼暢談軟件設計(八):從根上理解 Mybatis 二級緩存 - 京東云
20.mybatis一級緩存和二級緩存的應用場景及生效條件;為什么mybatis默認不開啟二級緩存? - 51CTO博客
21.Mybatis二級緩存詳解與實戰教程 - 慕課網
22.25 MyBatis 映射文件 cache之二級緩存 - 嗶哩嗶哩
23.【Java面試】 在微服務架構下,MyBatis 二級緩存的使用會面臨哪些挑戰? - 嗶哩嗶哩
24.Mybatis一級二級緩存詳解 - 度小視
25.如何了解MyBatis 的二級緩存? - 知足快樂田園
26.mybatis一級緩存和二級緩存的應用場景及生效條件 - 學亮編程手記
27.【Java面試】阿里一面:MyBatis緩存機制的理解以及優缺點是什么? - 嗶哩嗶哩
28.京東面試題:MyBatis的二級緩存 - 嗶哩嗶哩
29.MyBatis框架:二級緩存概述及案例 - HelloWorld小碼農
30.Mybatis一級緩存與二級緩存詳解 - 度小視
31.10分鐘帶你掌握MyBatis二級緩存,輕松應對復雜查詢。 - 笑傲存錢罐
32.HoRain云–MyBatis一級緩存、二級緩存詳解:正確理解緩存機制與實戰應用 - HoRain 云助手
33.十三、MyBatis緩存 - antiai
34.Mybatis-1 - 仙人掌
35._Mybatis一級緩存和二級緩存(帶測試方法) - 騰訊云
36.MyBatis一級緩存和二級緩存詳解 - CSDN博客
37.Java社招面試題:MyBatis 的一級、二級緩存?面試官問完我直接講了半小時! - 51CTO博客
38.數據庫常見面試題:聊聊Mybatis中的一級緩存,二級緩存 - 嗶哩嗶哩
39.🚀 MyBatis緩存機制揭秘 🔍 - 此刻的雨一落便是長久
分布式環境下mybatis緩存有什么問題?
在分布式環境下,MyBatis的默認緩存機制(尤其二級緩存)會面臨以下核心問題及挑戰:
🚨 一、數據一致性問題(最嚴重)
-
節點間緩存不同步
- 默認二級緩存是本地存儲(如
PerpetualCache
基于HashMap
),不同服務節點的緩存相互獨立。當一個節點更新數據并清空自身緩存時,其他節點仍持有舊數據,導致臟讀。 - 典型場景:
- 節點A更新用戶信息 → 清空自身緩存;
- 節點B讀取同一用戶 → 返回未更新的緩存舊值。
- 默認二級緩存是本地存儲(如
-
跨節點更新失效延遲
- MyBatis僅在同命名空間的DML操作后清空當前節點緩存,但無法通知其他節點同步失效。
? 二、緩存穿透與雪崩風險加劇
-
穿透問題(查詢不存在的數據)
- 惡意請求高頻訪問不存在的數據(如無效ID),穿透緩存直達數據庫。分布式環境下,多個節點同時遭受此類攻擊會迅速壓垮數據庫。
-
雪崩問題(緩存集中失效)
- 多個節點緩存設置相同過期時間,到期后所有請求同時沖擊數據庫,引發連鎖故障。
?? 三、性能與資源瓶頸
-
內存占用過高
- 每個節點獨立緩存全量數據,造成內存冗余。例如,10個節點緩存同一10GB數據集 → 總占用100GB,資源利用率低下。
-
分布式鎖競爭
- 若通過分布式鎖(如RedisLock)強制緩存一致性,高并發下鎖競爭會顯著增加延遲。
🛠? 四、解決方案與優化實踐
? 1. 啟用分布式緩存替代默認二級緩存
方案 | 實現方式 | 優勢 |
---|---|---|
集成Redis | 配置<cache type="org.mybatis.caches.redis.RedisCache"> ,所有節點共享中央緩存。 | 數據全局一致,避免節點間不一致 |
Ehcache集群 | 通過Terracotta或RMI實現節點間緩存同步。 | 減少數據庫壓力,自動同步失效 |
? 2. 防御緩存異常
- 防穿透:
- 對非法請求參數布隆過濾器(Bloom Filter)攔截,直接拒絕。
- 緩存空值(如
NULL
)并設置短過期時間(例:30秒)。
- 防雪崩:
- 分散緩存過期時間(基礎時間 + 隨機偏移量)。
- 熱點數據永不過期,通過異步線程刷新。
? 3. 降級兜底策略
- 熔斷限流:
當緩存服務宕機時,觸發熔斷機制(如Hystrix),請求直接降級到本地一級緩存或靜態數據。 - 異步核對:
定時任務比對緩存與數據庫數據,修復不一致(如訂單庫存核對)。
💎 總結建議
📌 分布式環境下的緩存選擇優先級:
Redis集群 > Ehcache集群 > 關閉MyBatis二級緩存
- 強一致性場景:必須依賴Redis等分布式緩存;
- 高頻更新數據:直接禁用緩存,改用數據庫讀寫分離。
引用鏈接:
1.HoRain云–MyBatis一級緩存、二級緩存詳解:正確理解緩存機制與實戰應用 - HoRain 云助手
2.MyBatis之緩存避坑: MyBatis的一級緩存、二級緩存的實現分析與分布式環境下數據一致性問題 - 騰訊云
3.MyBatis緩存機制(一級/二級緩存失效場景) - 51CTO博客
4.Mybatis緩存機制 - CSDN博客
5.mybatis 緩存未生效 - CSDN博客
6.MyBatis Plus整合Redis實現分布式二級緩存的問題 - 腳本之家
7.MyBatis中二級緩存和其失效的一種情況 - 博客園
8.mybatis二級緩存的缺點有哪些 - 億速云計算
9.MyBatis的二級緩存整合redis - 唐有煒
10.35. MyBatis中的緩存失效機制是如何工作的? - CSDN博客
11.Mybatis 緩存 - CSDN博客
12.Mybatis自定義分布式二級緩存實現與遇到的一些問題解決方案! - 博客園
13.詳解mybatis的一二級緩存以及緩存失效原因 - CSDN博客
14.【字節Java二面】說說你對Mybatis中緩存機制的理解以及優缺點?面試必問,建議收藏! - 嗶哩嗶哩
15.mybatis詳解,mybatis一級二級緩存機制,以及Ehcache & Redis對比 - CSDN博客
16.2025年大廠實戰場景面試題精析(附真題拆解) - Java碼農
17.mybatis緩存有哪幾種 和redis 緩存有啥區別 mybatis有緩存為什么還要用redis - 51CTO博客
18.mybatis的緩存機制有哪些和Redis的緩存機制比有什么不同 mybatis緩存原理 - 51CTO博客
19.1.【Java面試】讓人醍醐灌頂的回答,系統中應該如何使用分布式緩存? - 嗶哩嗶哩
20.緩存穿透、緩存擊穿、緩存雪崩、熱key問題怎么解決? - 艾小仙人
21.緩存雪崩與穿透問題解析,如何避免和解決 - 度小視
22.經典面試題,大廠幾個巧妙的方案,復雜高并發系統緩存設計 - 嗶哩嗶哩
23.【春招預熱】2025Java春招面試突擊課(7天速成版)MySQL數據庫、Redis、Spring全家桶、JVM,分布式微服務…一周刷完,金三銀四一路狂飆 - 嗶哩嗶哩
24.mybatis 二級緩存失效_面試題:MyBatis二級緩存 - CSDN博客
25.淺析mybatis里的緩存機制 - 一級緩存、二級緩存、二級緩存多表查詢的問題及解決、二級緩存分布式問題 - 博客園
26.CSDN中mapper.xml更新后,MyBatis緩存失效問題如何解決?_編程語言-CSDN問答 - CSDN問答
27.spring mybatis 緩存失效原因_51CTO博客 - 51CTO博客
28.解鎖MyBatis 緩存:深入剖析原理與典型實現示例展示 - 跟我從零開始學編程
29.MyBatis緩存揭秘:兩級并存 - 七安Melody會彤彤
30.圖解| 聊聊 MyBatis 緩存 - 悟空聊架構
31.關于MyBatis緩存你不知道的事 - 千鋒Java學習站
32.MyBatis 的緩存機制 - RainbowSea
33.Mybatis二級緩存 和 用mysql redis實現的緩存 有什么區別? - Java我寫的
34.spring mybatis 緩存失效原因 mybatis緩存key - 51CTO博客
35.MyBatis知識匯總(第十篇)【詳解】MyBatis的緩存機制,一級緩存+失效的3種情況,二級緩存,詳解,實例,注意事項 - 51CTO博客
36.十三、MyBatis緩存 - antiai
37.Mybatis 一級緩存,Mybatis 二級緩存,Mybatis 緩存失效 - 博客園
38.MyBatis的一級緩存和二級緩存 - 吉艾斯外
39.為什么不推薦使用 MyBatis 二級緩存,有哪些替代方案? - 騰訊云
40.JDBC痛點?MyBatis秒解 - 英俊的剛寶
41.【Java面試】阿里一面:MyBatis緩存機制的理解以及優缺點是什么? - 嗶哩嗶哩