MyBatis-開啟緩存


1、一級緩存:

  MyBatis默認開啟了一級緩存,一級緩存是在sqlSession層面進行緩存的。 即同一個SqlSession多次調用同一個Mapper和同一個方法的同一個參數,只會進行一次數據庫查詢,然后把數據緩存到緩沖中,以后直接從緩存中直接取出,不會直接查詢數據庫。

  但是不同的SqlSession對象,因為不同的SqlSession都是相互隔離的,所以相同的Mapper、參數和方法,它還是會再次發送。

 

2、二級緩存:

  為了克服一級緩存不同SqlSession對象引發的問題,需要開啟二級緩存。二級緩存是緩存的zaiSqlSessionFactory層m面給各個SqlSession對象共享。默認二級緩存是不開啟的,需要手動開啟。

  2.1 、開啟二級緩存的配置:

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

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

    默認的參數屬性:

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

    自定義二級緩存參數:

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

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

      • 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" />

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM