【Mybatis】——開啓二級緩存

背景

在日常的開發過程中,總會檢查到以前的接口性能是特別的不好,但是有歷史原因又不敢去動裏面的邏輯,但是當我們使用的mybatis的時候,並且發現這個接口比較頻繁的查詢某一個數據的時候,並且這個數據對於用戶來說可以存在一定的延遲,那麼mybatis的二級緩存就派上用場了,接下來看下我們怎麼來開啓mybatis的二級緩存的吧

一、基於Spring+Mybatis

  1. mybaits的二級緩存是mapper範圍級別,要在具體的mapper.xml中開啓二級緩存。

    在覈心配置文件 中加入:

    <setting name="cacheEnabled"value="true"/>

    <!-- 全局配置參數,需要時再設置 -->

        <settings>

           <!-- 開啓二級緩存  默認值爲true -->

        <setting name="cacheEnabled" value="true"/>

        </settings>

  2. mpper.xml中開啓二緩存,mapper.xml下的sql執行完成會存儲到它的緩存區域(HashMap)。

    <mapper namespace="cn.hpu.mybatis.mapper.UserMapper">

    <!-- 開啓本mapper namespace下的二級緩存 -->

    <cache></cache>

  3. 對應的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)

三、驗證

請自行驗證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章