首页 / 缓存 / Mybatis一级缓存、二级缓存
Mybatis一级缓存、二级缓存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mybatis一级缓存、二级缓存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1577字,纯文字阅读大概需要3分钟。
内容图文
![Mybatis一级缓存、二级缓存](/upload/InfoBanner/zyjiaocheng/1080/50a3d514a9d44402999fee5975a67b73.jpg)
1.Mybatis一级缓存
- 什么是缓存
- 程序经常要调用的对象存在内存中,方便其使用时可以快速调用,不必去数据库或者其他持久化设备中查询,主要就是提高性能
- Mybatis一级缓存
- 简介:一级缓存的作用域是SQLSession,同一个SQLSession中执行相同的SQL查询(相同的SQL和参数),第一次会去查询数据库并写在缓存中,第二次会直接从缓存中取
- 基于PerpetualCache的HashMap本地缓存
- 默认开启一级缓存
- 失效策略:当执行SQL时候两次查询中间发生了增删改的操作,即insert、update、delete等操作commit后会清空该SQLSession缓存;比如SQLSession关闭或者清空等也会失效
2.Mybatis二级缓存
-
Mybatis二级缓存
- 简介:二级缓存是namespace级别的,多个SQLSession去操作同一个namespace下的mapper的SQL语句,多个SQLSession可以共用二级缓存,如果两个mapper的namespace相同(即使是两个mapper,那么这两个mapper中执行SQL查询到的数据也将存在相同的二级缓存区域中,但是最后是每个mapper单独的名称空间)
- 基于PerpetualCache的HashMap本地缓存,可自定义存储源,如Ehcache/Redis等
- 默认是没有开启二级缓存
- 操作流程:第一次调用某个namespace下的SQL去查询信息,查询到的信息会存放该mapper对应的二级缓存区域。第二次调用同个namespace下的Mapper映射文件中,相同的SQL去查询信息,会去对应的二级缓存内取结果
-
失效策略:执行同个namespace下的mapper映射文件中增删改sql,并执行了commit操作,会清空该二级缓存
-
注意:实现二级缓存的时候,Mybatis建议返回的的POJO是可序列化的,也就是建议实现Serializable接口
-
缓存淘汰策略:会使用默认的LRU算法来收回(最近最少使用的)
-
如何开启某个二级缓存,mapper.xml里面配置
<!--开启mapper的namespace下的二级缓存--> <!-- eviction:代表的是缓存回收策略,常见下面两种 LRU:最近最少使用的,移除最长时间不用的对象 FIFO:先进先出,按对象进入缓存的顺序来移除他们 flushInterval:刷新间隔时间,单位为毫秒,这里配置的是100秒刷新,如果不配置,当SQL被执行的时候才会去刷新缓存 size:引用数目,代表缓存最多可以存储多少个对象,设置过大会导致内存溢出 readOnly:只读,缓存数据只能读取而不能修改,默认值是false --> <cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>
<!--全局配置--> <settings> <!--这个配置使全局的映射器(二级缓存)启用或禁用,全局总开关,这里关闭,mapper中开启也没用--> <setting name="cacheEnabled" value="true"/> </settings>
-
如果需要控制全局mapper里面某个方法不使用缓存,可以配置
useCache="false"
-
一级缓存和二级缓存使用顺序
- 优先查询二级缓存-->查询一级缓存-->查询数据库
原文:https://www.cnblogs.com/Gen2021/p/14705017.html
内容总结
以上是互联网集市为您收集整理的Mybatis一级缓存、二级缓存全部内容,希望文章能够帮你解决Mybatis一级缓存、二级缓存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。