MyBatis 缓存详解-二级缓存验证
(验证二级缓存需要先开启二级缓存)
1、事务不提交,二级缓存不存在
BlogMapper mapper1 = session1.getMapper(BlogMapper.class);
System.out.println(mapper1.selectBlogById(1));
// 事务不提交的情况下,二级缓存不会写入
// session1.commit();
BlogMapper mapper2 = session2.getMapper(BlogMapper.class);
System.out.println(mapper2.selectBlogById(1));
思考:为什么事务不提交,二级缓存不生效?
因为二级缓存使用TransactionalCacheManager(TCM)来管理,最后又调用了TransactionalCache 的getObject()、putObject 和commit()方法,TransactionalCache里面又持有了真正的Cache 对象,比如是经过层层装饰的PerpetualCache。
在putObject 的时候,只是添加到了entriesToAddOnCommit 里面,只有它的commit()方法被调用的时候才会调用flushPendingEntries()真正写入缓存。它就是在DefaultSqlSession 调用commit()的时候被调用的。
2、使用不同的session 和mapper,验证二级缓存可以跨session 存在取消以上commit()的注释
3、在其他的session 中执行增删改操作,验证缓存会被刷新
Blog blog = new Blog();
blog.setBid(1);
blog.setName("357");
mapper3.updateByPrimaryKey(blog);
session3.commit();
// 执行了更新操作,二级缓存失效,再次发送SQL 查询
System.out.println(mapper2.selectBlogById(1));
思考:为什么增删改操作会清空缓存?
在CachingExecutor 的update()方法里面会调用flushCacheIfRequired(ms),isFlushCacheRequired 就是从标签里面渠道的flushCache 的值。而增删改操作的flushCache 属性默认为true。
MyBatis 缓存详解-二级缓存验证相关推荐
- MyBatis 缓存详解-二级缓存介绍
二级缓存是用来解决一级缓存不能跨会话共享的问题的,范围是namespace 级别的,可以被多个SqlSession 共享(只要是同一个接口里面的相同方法,都可以共享),生命周期和应用同步. 思考一个问 ...
- MyBatis 缓存详解-第三方缓存做二级缓存
除了MyBatis 自带的二级缓存之外,我们也可以通过实现Cache 接口来自定义二级缓存. MyBatis 官方提供了一些第三方缓存集成方式,比如ehcache 和redis: https://gi ...
- MyBatis 缓存详解-一级缓存验证
(基于mybatis-standalone 工程,注意演示一级缓存需要先关闭二级缓存,localCacheScope 设置为SESSION) 判断是否命中缓存:如果再次发送SQL 到数据库执行,说明没 ...
- MyBatis 缓存详解-cache 缓存
(基于mybatis-standalone 工程) 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存 ...
- MyBatis 缓存详解-一级缓存的不足
使用一级缓存的时候,因为缓存不能跨会话共享,不同的会话之间对于相同的数据可能有不一样的缓存.在有多个会话或者分布式环境下,会存在脏数据的问题.如果要解决这个问题,就要用到二级缓存. [思考]一级缓存怎 ...
- MyBatis 缓存详解-一级缓存(本地缓存)介绍
一级缓存也叫本地缓存,MyBatis 的一级缓存是在会话(SqlSession)层面进行缓存的.MyBatis 的一级缓存是默认开启的,不需要任何的配置. 首先我们必须去弄清楚一个问题,在MyBati ...
- http缓存详解(强缓存、协商缓存相关字段以及缓存流程解析)
缓存相关字段: http1.0:pragma.expires http1.1:cache-control.last-modified.if-modified-since.etag.if-none-ma ...
- MyBatis 一级缓存二级缓存详解
相关内容: 架构师系列内容:架构师学习笔记(持续更新) MyBatis 缓存详解 cache 缓存 缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力.跟Hibernat ...
- Mybatis二级缓存详解
Mybatis二级缓存 Mybatis相关全览 一.简介 二.一级缓存 1.入口 2.演示 案例一: 案例二: 3.总结 三.二级缓存 1.入口 2.如何开启二级缓存 cache-ref配置 cach ...
最新文章
- Webpack 代码分离
- python代码计算图像的分辨率
- 一个管理者的反思(太深刻了!)
- 选哪扇门得奖金的算法
- .net 连接php,NetBeans平台如何连接到PHP解析器?
- 洛谷 - P3254 圆桌问题(最大流+路径打印)
- 两分钟倒计时(Python)
- js中 switch 注意事项
- 有道词典Linux版下载安装
- eslint 报error
- PHP - ReflectorClass 反射类的作用
- linux硬盘分区PPT,linux下的硬盘分区详解.doc
- 拓端tecdat|通过Python中的Apriori算法进行关联规则挖掘
- Python开发过程中错误解决记录【持续更新记录,欢迎交流】
- linux酷q运行不了,笔记:Linux中安装酷Q
- 高分屏更改Adobe Premier CC UI界面字体大小
- plsql导出oracle数据库表结构及表数据
- css 文本和div垂直居中方法汇总
- 永久免费的域名注册有吗?免费的域名注册在哪个平台?
- TF flags的简介