SpringBoot+Mybatis開啓二級緩存

MyBatis 內置了一個強大的事務性查詢緩存機制,包括一級緩存,二級緩存,它可以非常方便地配置和定製。一級緩存是sqlSession級別的緩存,二級緩存是Mapper 命名空間級別的緩存。

MyBatis 默認是開啓一級緩存的,即同一個 sqlSession 每次查詢都會先去緩存中查詢,沒有數據的話,再去數據庫獲取數據。

<dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.0</version>
</dependency>

它的默認配置就是啓用二級緩存的,所以這個不用我們操心。因爲Mybatis二級緩存是基於mapper級別的,所以還需要在各個Mapper 命名空間中進行進一步設置。

1)對於sql語句存在於mapper.xml上時,在mapper中開啓二級緩存需要在mapper.xml文件裏添加二級緩存的屬性配置:

<cache />

加上這個標籤,二級緩存就會啓用,它的默認屬性如下:

1、映射語句文件中的所有 select 語句將會被緩存。
2、映射語句文件中的所有 insert,update 和 delete 語句會刷新緩存。
3、緩存會使用 Least Recently Used(LRU,最近最少使用的)算法來收回。
4、根據時間表(比如 no Flush Interval,沒有刷新間隔), 緩存不會以任何時間順序來刷新。
5、緩存會存儲列表集合或對象(無論查詢方法返回什麼)的 1024 個引用。
6、緩存會被視爲是 read/write(可讀/可寫)的緩存,意味着對象檢索不是共享的,而且可以安全地被調用者修改,而不干擾其他調用者或線程所做的潛在修改。

可用的清除策略有:

  • LRU – 最近最少使用:移除最長時間不被使用的對象。
  • FIFO – 先進先出:按對象進入緩存的順序來移除它們。
  • SOFT – 軟引用:基於垃圾回收器狀態和軟引用規則移除對象。
  • WEAK – 弱引用:更積極地基於垃圾收集器狀態和弱引用規則移除對象。

默認的清除策略是 LRU。

2)對於sql語句存在與接口註解中,需要在該接口類中添加如下註解:

@CacheNamespace

 命中緩存後會提示:

Cache hit ratio ...

另外,Mapper中的數據表類也需要實現序列化。

注意:

使用二級緩存時,sql語句的映射要麼全xml格式表示,要麼註解表示,二選一,不然可能會出現無法利用二級緩存或二級緩存沒有及時清空的bug問題。

參考文章:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#cache

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