MyBatis-開啓緩存

一、一級緩存:算法

  MyBatis默認開啓了一級緩存,一級緩存是在sqlSession層面進行緩存的。 即同一個SqlSession屢次調用同一個Mapper和同一個方法的同一個參數,只會進行一次數據庫查詢,而後把數據緩存到緩衝中,之後直接從緩存中直接取出,不會直接查詢數據庫。
sql

  可是不一樣的SqlSession對象,由於不一樣的SqlSession都是相互隔離的,因此相同的Mapper、參數和方法,它仍是會再次發送。數據庫

 

二、二級緩存:緩存

  爲了克服一級緩存不一樣SqlSession對象引起的問題,須要開啓二級緩存。二級緩存是緩存的zaiSqlSessionFactory層m面給各個SqlSession對象共享。默認二級緩存是不開啓的,須要手動開啓。安全

  2.1 、開啓二級緩存的配置:app

    在xx-mapper.xml文件中配置:性能

<!-- 開啓二級緩存(默認參數) -->
<cache/>

    默認的參數屬性:spa

      • 映射文件的全部的 select、insert、update和delete語句會刷新緩存
      • 緩存會使用默認的 Least Recently Used(LRU,最近最少使用原則)的算法回收緩存空間
      • 根據時間表,好比 No Flush Interval,(CNFI,沒有刷新間隔),緩存不會以任什麼時候間順序來刷新
      • 緩存會存儲列表集合或對象(不管查詢方法還回什麼)的1024個引用
      • 緩存會被視爲是read/write(可讀/可寫)的緩存,意味着對象檢索是不共享的,並且能夠很安全的被調用者修改,不干擾其它調用者調用或現成的潛在修改。  

    自定義二級緩存參數:code

<!-- 開啓二級緩存 -->
<cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>

     二級緩存的各個參數屬性:xml

      • eviction:緩存回收策略:   

           - LRU:最少使用原則,移除最長時間不用的對象

           - FIFO:先進先出原則,按照對象進入緩存的順序進行回收

           - SOFT:軟引用,移除基以垃圾回收器和軟引用規則的對象

           - WEAK:弱引用,更積極的移除基以垃圾回收器和軟引用規則的對象

      • flushInterval:刷新時間間隔,單位爲毫秒。若是不配置,那麼只進行數據可修改操做纔會被動刷新緩存區
      • size:引用額數目,表明緩存的最多能夠存儲的對象個數
      • readOnly:是否可讀,若是爲true,則全部的sql語句還回同一個對象(有助於提升性能,但操做同一條數據時,可能不安全),若是是false,則相同的SQL語句後面訪問cache的clone副本

      能夠在Mapper的具備方法下設置對二級緩存的訪問意願:

      • userCache配置:

          若是一條語句每次都須要最新的數據,就意味着每次都須要從數據庫查詢數據,能夠把這個屬性設置爲false,如:

<select id="selectAll" resultMap="BaseResultMap" useCache="false">
      • flushCache刷新緩存(就是清空緩存)

           二級緩存默認會在insert、update、delete操做後刷新緩存,能夠手動配置不更新緩存,以下:

<update id="updateById" parameterType="User" flushCache="false" />
相關文章
相關標籤/搜索