大家好,又见面了,我是你们的朋友全栈君。
什么是缓存?
简单来讲,缓存就是存储在缓冲区里的内容,或者可以理解为存在内存中的内容。用户可以将经常查询的内容放到缓存中,再次使用时直接从缓存中取值,而不需要再查询数据库。这样做的优点是响应迅速,减少了系统资源(网络资源、CPU资源等)开销;缺点是需要占用内存资源,服务器一旦关机,缓存就会丢失,重启后需要重新将写一遍数据到内存。
Mybatis的缓存 Mybatis的缓存分为一级缓存和二级缓存。一级缓存是默认开启的,二级缓存需要手动开启。
一级缓存是SqlSession级别的缓存,作用域是一个SqlSession。在同一个SqlSession中,执行相同的查询sql,第一次会先去查询数据库,并写入缓存。第二次再执行时,则直接从缓存中取数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该SqlSession的缓存。
二级缓存是mapper级别的缓存。作用域是是mapper的同一个namespace下的sql语句。第一次执行查询SQL时,会将查询结果存到二级缓存区域内。第二次执行相同的查询SQL,则直接从缓存中取出数据。如果两次执行查询sql的中间执行了增删改操作,则会清空该namespace下的二级缓存。
1、开启二级缓存
(1) 修改resources目录下的application.properties配置文件,加入开启mybatis二级缓存的配置和打印执行sql的配置
代码语言:javascript复制# 开启mybatis的二级缓存
mybatis.configuration.cache-enabled=true
# 开启sql打印
logging.level.com.batis.mapper=debug
(2) 修改resources目录下mapping目录对应的Mapper文件
代码语言:javascript复制<!-- 开启二级缓存 -->
<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) 实体对象要implements Serializable,否则报错
代码语言:javascript复制public class User implements Serializable{
}
(4) 启动工程,如果出现
代码语言:javascript复制Cache Hit Ratio . #表示缓存开启了.....
2、启动batis项目并使用postman工具进行测试 查询用户:
打印sql日志,可以看到详细的查询过程(红框),第一次查询时调用了查询语句,后面绿框中的是多次查询,没有调用查询语句,而是直接取缓存的值;100秒之后再进行第二次查询,又重新调用了查询语句,并且多次查询后是从缓存取出值。:
插入用户并执行查询:
从上图的执行结果可以看到,先进行查询操作,查询结果更新到缓存,后面的几次查询都是直接从缓存取值。之后执行一个插入用户的操作,再多次执行查询操作的时候,会先调用一次查询语句将查询结果写入缓存,后面的几次操作就会直接从缓存取值。
至此Springboot集成Mybatis的二级缓存内容已经全部讲完,测试也都完全符合预期! 有可以改进的地方希望诸位同学不要吝惜笔墨,加以指正,万分感谢!
参考文章链接:https://blog.csdn.net/huanongying123/article/details/104293908
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/191609.html原文链接:https://javaforall.cn