Mybatis的緩存機制

Mybatis的緩存包括一級緩存和二級緩存。

一級緩存是SqlSession級別,在同一個SqlSession對象中使用,是自動開啟,不能關閉,只能清除;二級緩存mapper級別,可在多個SqlSession中共享,需要手動開啟。

一級緩存

同一個SqlSession對象,在沒有收到改變數(shù)據(jù)的請求之前,第二次查詢直接從緩存中取出上次查詢的結(jié)果。
緩存失效:1.不是同一個SqlSession對象 2.兩次的查詢條件不同 3.在兩次查詢之間,有增、刪、改commit,會清空緩存 4.兩次之間手動清空緩存clearCache()。

二級緩存

1.mybatis的全局配置文件中手動開啟:

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

2.在相應的mapper映射文件中 加入

<mapper namespace="...">...<cache eviction="FIFO" />...</mapper>"

緩存失效:在兩次查詢之間,有增、刪、改commit,會清空緩存。mapper中的所有緩存綁定在同一個命名空間中,一條語句對數(shù)據(jù)的更改會刪除所有的mapper級緩存,可以通過配置useCache 和 flushCache改變默認的方式,實現(xiàn)每條語句與mapper的緩存交互。

  1. 禁用<select>的二級緩存,useCache="false",默認為true
    針對每次查詢都去數(shù)據(jù)庫查詢數(shù)據(jù)
<select id="getIyId" parameterType="java.lang.Integer" ... useCache="false">

4.刷新某個<select>使用flushCache

// 每條語句的flushCache 和 useCache的默認方式
<select ... flushCache="false" useCache="true"/>
<insert ... flushCache="true"/>
<update ... flushCache="true"/>
<delete ... flushCache="true"/>
  1. 默認二級緩存是關閉的,可以設置全局打開,但在使用中一般是針對某個mapper的namespace打開二級緩存,所有的select都會打開二級緩存。
<mapper namespace="***">
<cache eviction="LRU" flushInterval="10000"/>
或
<mapper namespace="***">
</cache>

需要關閉namespace下的某個查詢的二級緩存

<select *** useCache="false">

可選擇的回收策略

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一級緩存 MyBatis 包含了一個非常強大的查詢緩存特性,它可以非常方便地配置和定制。MyBatis 3 中的緩...
    端碗吹水閱讀 442評論 0 3
  • 1. MyBatis緩存 1.1 緩存介紹 就是將用戶經(jīng)常查詢的數(shù)據(jù)的結(jié)果的一個保存,保存到一個內(nèi)存中(緩存就是內(nèi)...
    GGarrett閱讀 23,019評論 0 11
  • 一級緩存 Mybatis對緩存提供支持,但是在沒有配置的默認情況下,它只開啟一級緩存,一級緩存只是相對于同一個Sq...
    學編程的小屁孩閱讀 387評論 0 0
  • 緩存技術是一種“以空間換時間”的設計理念,是利用內(nèi)存空間資源來提高數(shù)據(jù)檢索速度的有效手段之一。Mybatis包含一...
    不知名的蛋撻閱讀 4,244評論 0 7
  • title: MyBatis之查詢緩存tags: MyBatiscategories: MyBatis 若圖片無法...
    codingXiaxw閱讀 396評論 1 0

友情鏈接更多精彩內(nèi)容