MyBatis缓存
介绍:
正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持。
- 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。
- 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。
- 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被clear。
一级缓存:
- MyBatis的一级缓存指的是在一个Session域内,session为关闭的时候执行的查询会根据SQL为key被缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效)
- 一级缓存是默认开启的,由于我们在使用的过程中会交给spring进行管理session。在进行操作时,spring会自动开启、关闭session。所以在项目有没有使用到一级缓存。
- 由于没有使用到,这次就没有对一级缓存进行测试。
二级缓存:
- MyBatis的二级缓存需要手动开启。它的作用域是
- 在MyBatis配置文件中加入
<setting name="cacheEnabled" value="true"/>
- 在对应的Mapper.xml中也需要开启
<cache eviction="FIFO" <!--回收策略为先进先出--> flushInterval="60000" <!--自动刷新时间为60s--> size="512" readOnly="true" />
- 在对MyBatis的二级缓存测试时,我们需要在查询的时候打印mysql日志。
- 首先要保证所需要的jar存在,slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar slf4j-simple-1.6.1.jar 三个jar要保持版本的一致。
- 把log的日志级别调到debug,并加入以下配置
log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
- 测试查询结果,第一次出现了查询语句,当再次查询时,将不发出查询语句。
==> Preparing: select id, name, pid, url, type,creater,modifier,create_time,modify_time,deleteState from menu where 1=1 and deletestate='0' and pid = '0' | ooo Using Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@293354] | ==> Parameters: | ==> Preparing: select id, name, pid, url, type,creater,modifier,create_time,modify_time,deleteState from menu where 1=1 and deletestate='0' and pid = '0' | ==> Parameters: | <== Total: 3 | <== Total: 3 |
总结:
- 在使用二级缓存时,需要保证这个namespace中所操作的表不能在其它namespace中进行更新操作。(只有这样才能保持数据的一致性)
- 在进行insert、update、delete操作时,会清处当前namespace下的所有缓存。
- 如果有两个namespace对同一张表有更新操作,那么就会造成数据的不一致性。
相关推荐
MyBatis缓存(一级缓存、二级缓存)
mybatis支持缓存,如果我们查找数据库中某一条记录时,先从缓存中获取,如果缓存中不存在该记录,则从数据库中获取,在放入到缓存中。该文档是关于mybatis使用一级或二级缓存的介绍
通过log4j打印来查看mybatis缓存实现的机制, 原博客http://blog.csdn.net/zouxucong/article/details/68947052
Mybatis系列教程Mybatis缓存共17页.pdf.zip
Mybatis缓存开源架构源码2021.pdf
【MyBatis学习笔记八】——MyBatis缓存.zip 博客地址:https://blog.csdn.net/weixin_43817709/article/details/117601742
MyBatis缓存机制深度解剖[收集].pdf
介绍:一个很简单的Maven项目,对Mybatis的缓存进行测试
主要介绍了Mybatis 缓存原理及失效情况解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
springmvc整合Mybatis,Redis;实现将查询的数据进行二级缓存处理
主要介绍了MyBatis缓存实现原理及代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
mybatis的缓存配置文件,用于复制黏贴到配置文件中 yes
个人学习mybatis源码总结
学习MyBatis框架的一级缓存和二级缓存,明确缓存的工作机制,并实现MyBatis框架与第三方缓存EhCache的整合。
NULL 博文链接:https://jysemel.iteye.com/blog/2018922
主要介绍了MyBatis缓存功能原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要处理mybatis层对数据进行缓存处理问题,在数据底层进行优化
MyBatis缓存分为一级缓存和二级缓存一级缓存,本文给大家介绍mybatis缓存知识,非常不错具有参考借鉴价值,感兴趣的朋友一起学习吧
MyBatis整合Ehcache第三方缓存。