Springboot集成Mybatis之二级缓存

什么是缓存?
简单来讲,缓存就是存储在缓冲区里的内容,或者可以理解为存储在内存中的内容。用户可以将经常查询的内容放到缓存中,再次使用时直接从缓存中取值,而不需要再查询数据库。这样做的优点是响应迅速,减少了系统资源(网络资源、CPU资源等)开销;缺点是需要占用内存资源,服务器一旦关机,缓存就会丢失,重启后需要重新将数据写一遍到内存。
Mybatis的缓存
Mybatis的缓存分为一级缓存和二级缓存。一级缓存是默认开启的,二级缓存需要手动开启。
一级缓存是SqlSession级别的缓存,作用域是一个SqlSession。在同一个SqlSession中,执行相同的查询sql,第一次会先去查询数据库,并写入缓存。第二次再执行时,则直接从缓存中取数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该SqlSession的缓存。
二级缓存是mapper级别的缓存。作用域是mapper的同一个namespace下的sql语句。第一次执行查询SQL时,会将查询结果存到二级缓存区域内。第二次执行相同的查询SQL,则直接从缓存中取出数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该namespace下的二级缓存。
注意:SqlSession(即一级缓存)关闭之后,一级缓存的数据才会写入二级缓存。
下面结合上一章(最简单的Springboot集成Mybatis教程)讲解一下如何开启Mybatis的二级缓存。
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。
2、启动batis项目并使用postman工具进行测试
查询用户:
在这里插入图片描述
打印sql日志,可以看到详细的查询过程(红框),第一次查询时调用了查询语句,后面绿框中的是多次查询,没有调用查询语句,而是直接取缓存的值;100秒之后再进行第二次查询,又重新调用了查询语句,并且多次查询后是从缓存取出值。:
在这里插入图片描述
插入用户并执行查询:
在这里插入图片描述
从上图的执行结果可以看到,先进行查询操作,查询结果更新到缓存,后面的3次查询都是直接从缓存取值。之后执行一个插入用户的操作,再多次执行查询操作的时候,会先调用一次查询语句将查询结果写入缓存,后面的3次操作就会直接从缓存取值。

至此Springboot集成Mybatis的二级缓存内容已经全部讲完,测试也都完全符合预期!
有可以改进的地方希望诸位同学不要吝惜笔墨,加以指正,万分感谢!

参考文章链接:
https://www.jianshu.com/p/556b70e8ec9f

缓存的查询顺序:
二级缓存 -> 一级缓存 -> 数据库

参考文章链接:
https://blog.csdn.net/m0_73557631/article/details/132025235
https://blog.csdn.net/m0_61961937/article/details/127070497

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值