MybatisPlus二級快取
- 2022 年 2 月 15 日
- 筆記
- JAVA, Java EE, Java知識圖譜, mybatisPlus, springboot, 二級快取
一、序言
本文承接[Mybatis快取體系探究],提供基於MybatisPlus技術可用於生產環境下的二級快取解決方案。

1、前置條件
- 掌握MyBatis二級快取的原理
有關MyBatis快取原理內容,參考[Mybatis快取體系探究]
- 選擇符合條件的MybatisPlus版本
本方案對MybatisPlus版本有嚴格的限制,使用版本不低於3.4.3.4,如果低於此版本,則無法滿足生產環境條件下的閉環需求。
- 正確處理連接(多表)查詢
正確的多表連接查詢,請參考[MybatisPlus連接查詢解決方案]
2、目標與收穫
如果應用有分散式快取需求,那麼直接棄用二級快取的方案,直接選配業務層快取方案。
假如應用沒有分散式場景,那麼通過簡單改造,引入二級快取,能夠極大提高響應效率。
二、原理分析
1、二級快取
選用MybatisPlus來實現二級快取最大的考量是其使用的單表操作,換而言之,正確的使用二級快取的前提是不能使用傳統意義上的多表連接操作,否則一定存在快取數據不能實時更新的情況。
2、快取數據更新
所有的快取數據必然涉及到數據更新,二級快取同樣需要主動更新數據。二級快取是以命名空間為單位的,換而言之同一個命名空間內的數據更新會自動觸發快取更新(本質為數據失效)。查詢操作快取數據,增加、修改、刪除數據使快取失效。
自成體系的快取更新與管理在提高了應用響應速度的同時降低了快取管理的複雜度,有利於提高開發效率。
3、快取的區別
這裡提到的二級快取有必要與三級快取(業務快取)做區分,二級快取指DAO層快取,使用快取的目的是降低網路IO對應用的影響;三級快取指業務層快取,主要是降低複雜計算對CPU性能的佔用。
三、本地二級快取
對於普通項目,使用內置本地二級快取即能夠滿足需求,這裡以MybatisPlus為例說明如何正確的使用二級快取。
1、兩套API
MybatisPlus內置封裝兩套訪問資料庫的API,一是以BaseMapper為基礎的API,另一套是以AR為基礎的API,二者在使用二級快取不可通用。表現形式是BaseMapper內置介面快取的數據,使用AR內置介面更新數據時無法清楚快取,至少到此版本尚不支援。
考慮到BaseMapper介面體系比較豐富,因此選擇保留BaseMapper體系介面而禁用AR介面,從機制上保證使用的是一套介面,從而調用增刪查改能夠實時刷新二級快取。
需要指明的是Mapper層和Service層使用的是同一套介面,因此可放心使用。
2、快取實現類型
默認二級快取實現類型為PerpetualCache,此中類型的快取要求被快取的對象實現序列化介面。其它類型的本地快取有EhCache、Caffeine等。



