背景
在日常的開發過程中,總會檢查到以前的接口性能是特別的不好,但是有歷史原因又不敢去動裏面的邏輯,但是當我們使用的mybatis的時候,並且發現這個接口比較頻繁的查詢某一個數據的時候,並且這個數據對於用戶來說可以存在一定的延遲,那麼mybatis的二級緩存就派上用場了,接下來看下我們怎麼來開啓mybatis的二級緩存的吧
一、基於Spring+Mybatis
-
mybaits的二級緩存是mapper範圍級別,要在具體的mapper.xml中開啓二級緩存。
在覈心配置文件 中加入:
<setting name="cacheEnabled"value="true"/>
<!-- 全局配置參數,需要時再設置 -->
<settings>
<!-- 開啓二級緩存 默認值爲true -->
<setting name="cacheEnabled" value="true"/>
</settings>
-
mpper.xml中開啓二緩存,mapper.xml下的sql執行完成會存儲到它的緩存區域(HashMap)。
<mapper namespace="cn.hpu.mybatis.mapper.UserMapper">
<!-- 開啓本mapper namespace下的二級緩存 -->
<cache></cache>
-
對應的pojo實現序列化(implements Serializable)
注意:開啓緩存的弊端是數據沒有實時性,當數據庫中的數據一旦修改,查詢的數據還是緩存中的數據沒有實時性,對於某些需要實時性顯示數據的接口我們可以設置useCache="false",設置該屬性後,該接口每次查詢出來都是去執行sql查詢出實時性數據。
相關配置說明:
①.設置useCache=false可以禁用當前select語句的二級緩存,即每次查詢都會發出sql去查詢,默認情況是true,即該sql使用二級緩存。
<select id="findOrderListResultMap" resultMap="ordersUserMap" useCache="false">
總結:針對每次查詢都需要最新的數據sql,要設置成useCache=false,禁用二級緩存。
②.清空緩存
<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User" flushCache="true">
總結:一般下執行完commit操作都需要刷新緩存,flushCache=true表示刷新緩存,這樣可以避免數據庫髒讀。
注意:
(1)當爲select語句時:
flushCache默認爲false,表示任何時候語句被調用,都不會去清空本地緩存和二級緩存。
useCache默認爲true,表示會將本條語句的結果進行二級緩存。
(2)當爲insert、update、delete語句時:
flushCache默認爲true,表示任何時候語句被調用,都會導致本地緩存和二級緩存被清空。
useCache屬性在該情況下沒有。
當爲select語句的時候,如果沒有去配置flushCache、useCache,那麼默認是啓用緩存的,所以,如果有必要,那麼就需要人工修改配置
二、Springboot+Mybatis
1、mapper註解配置
以下註解針對的是整個mapper中的sql生效
@CacheNamespace
flushInterval:緩存刷新間隔,緩存多長時間清空一次,默認不清空,設置一個毫秒值
因爲上面的註解是針對整個mapper生效,那麼如果mapper裏面的那個sql不需要支持二級緩存的話就在方法上增加下面的註解
@Options(useCache = false)
2、對象需要實現序列化
對應的pojo實現序列化(implements Serializable)
三、驗證
請自行驗證