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

 

posted @ 2018-12-14 11:20  路西的早晨  阅读(3504)  评论(0编辑  收藏  举报