mybatis 在开启二级缓存后 和悲观锁之间的
来源:互联网 发布:局部全局优化算法 编辑:程序博客网 时间:2024/06/11 11:08
因为最近准备在下一个项目将orm框架从hibernate改成mybatis所以便对mybatis做了一些测试。
环境:mysql ,由mybatis-generator 生成了如下的mapper文件
在mapper文件中开启了二级缓存之后发现不仅普通的select语句会被缓存击中,加上了for update的语句也会被缓存击中。而导致数据库加锁失败,
不过这也正常。(这里其实有点想当然了,因为for update可以超出事务隔离级别限制获取最新的数据,让我产生了for update可以无视缓存的错觉),
在发现这点之后,我便第一时间想到了select 的一个自带属性 flushCache 马上接着开始测试
预测结果,普通的select 被二级缓存击中,for update语句刷新缓存成功对表记录进行加锁
因为普通的select 和 带for update的select 所缓存的并不是同一个对象
结果
结果如图。。事与愿违。明明只在for update的节点元素上增加了刷新缓存的属性。但结果却导致了两个对象不同的实际对象在命中二级缓存之后都进行了缓存的刷新。
因为我对mybatis二级缓存原理并不是很了解。最后只好在另一个未开启二级缓存的mapper文件中重新配置了for update的select元素节点。
终于保证了普通查询能继续调用二级缓存。for update语句能对记录进行加锁。不知道。能否有更好的方法来解决呢?
阅读全文
0 0
- mybatis 在开启二级缓存后 和悲观锁之间的
- spring整合mybatis开启mybatis的二级缓存
- Mybatis的一级和二级缓存
- 二级缓存的开启
- mybatis的延迟加载和一、二级缓存
- Mybatis的一级缓存和二级缓存-2
- MyBatis的一级缓存和二级缓存
- Mybatis的一级缓存和二级缓存机制
- Mybatis和Hibernate配置二级缓存的方法
- Mybatis的一级缓存和二级缓存
- Mybatis的一级缓存和二级缓存
- Mybatis的一级缓存和二级缓存
- mybatis 的一级缓存和二级缓存
- mybatis 高速缓存和二级缓存
- MyBatis 一级和二级缓存
- Mybatis一级和二级缓存
- Mybatis的二级缓存
- MyBatis的二级缓存机制
- spi master spi driver spi device
- platform_driver_register()--如何match之后调用probe
- 图的广度遍历
- 距离和相似度计算总结
- 动态规划与贪心算法
- mybatis 在开启二级缓存后 和悲观锁之间的
- kobject,kset,子系统层次结构 、platform_device platform_driver
- 杂记
- Tomcat 集群配置
- Java常用算法手册-01算法概述
- 第一次使用Android Studio时你应该知道的一切配置
- 中位数(rms2017模拟3-1)*【推理】
- Hackinglab_Ctf闯关攻略(基础题)(自己部分更改)
- container_of()宏