Springboot集成Mybatis之二级缓存

Mybatis的缓存
Mybatis的缓存分为一级缓存和二级缓存。一级缓存是默认开启的,二级缓存需要手动开启。
一级缓存是SqlSession级别的缓存,作用域是一个SqlSession。在同一个SqlSession中,执行相同的查询sql,第一次会先去查询数据库,并写入缓存。第二次再执行时,则直接从缓存中取数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该SqlSession的缓存。
二级缓存是mapper级别的缓存。作用域是是mapper的同一个namespace下的sql语句。第一次执行查询SQL时,会将查询结果存到二级缓存区域内。第二次执行相同的查询SQL,则直接从缓存中取出数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该namespace下的二级缓存。

1、开启二级缓存
1)修改resources目录下的application.properties配置文件,加入开启mybatis二级缓存的配置和打印执行sql的配置

# 开启mybatis的二级缓存
mybatis.configuration.cache-enabled=true

# 开启sql打印
logging.level.com.batis.mapper=debug

2)修改resources目录下mapping目录对应的Mapper文件

<!-- 开启二级缓存 -->
<cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"></cache>

 

说明:
eviction: 回收策略

  • LRU 最近最少使用的,移除最长时间不被使用的对象,这是默认值
  • FIFO 先进先出,按对象进入缓存的顺序来移除它们
  • SOFT 软引用,移除基于垃圾回收器状态和软引用规则的对象
  • WEAK 弱引用,更积极的移除基于垃圾收集器状态和弱引用规则的对象

flushInterval: 刷新间隔,以毫秒为单位,100000表示每100秒刷新一次缓存。不设置的话,则每次调用语句时刷新。
readOnly: 只读
属性可以被设置为true后者false。只读的缓存会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改,这提供了很重要的性能优势。可读写的缓存会通过序列化返回缓存对象的拷贝,这种方式会慢一些,但很安全,因此默认为false。
size: 可以被设置为任意的正整数,要记住缓存的对象数目和运行环境的可用内存资源数目,默认1024。

 

3)可以在Mapper的具体方法下设置对二级缓存的访问意愿:

<select id="save" parameterType="XX" flushCache="true" useCache="false"> </select>

  

如果没有去配置flushCache、useCache,那么默认是启用缓存的

    • flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。
    • useCache默认为true,表示会将本条语句的结果进行二级缓存。
    • 在insert、update、delete语句时: flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。 useCache属性在该情况下没有。update 的时候如果 flushCache="false",则当你更新后,查询的数据数据还是老的数据。

启用测试

 

posted @ 2020-12-28 14:22  浅笑19  阅读(608)  评论(0编辑  收藏  举报