SpringBoot集成Mybatis几乎已经成为大多数项目的标配了,但在使用的过程中Mybatis的缓存功能往往会被大家遗忘,甚至很多开发者都没意识到在SpringBoot集成Mybatis还有一级缓存和二级缓存的事。
本来没计划写本篇文章,但在实践的过程掉坑里了,当从坑中爬起来时,发现有必要给大家写写Mybatis的缓存。
遇到什么样的坑
事情是这样的:项目中使用了乐观锁,并进行了失败尝试(3次)。但运行的时候发现尝试也是失败的。起初以为是并发问题,然后把尝试次数无限放大,发现次次都是失败的。
这其中一定有问题,经过研究发现是Mybatis的一级缓存导致的,于是专门研究了Mybatis的一级和二级缓存分享给大家。
缓存存在的意义
其实在日常的项目中,我们几乎都会用到缓存,比如一些不怎么改变的配置项,会采用缓存来减少数据库的压力。Mybatis的一级二级缓存所起到的作用也是相同的。都是为了减少数据库压力,提高系统性能。
两个基本缓存的区别
Mybatis的一级缓存与二级缓存的主要区别是它们所缓存的范围不同。一级缓存是单个session级别的,二级缓存是多个session级别的,只不过多个session需要是同一个namespace下的。关于细节我们后面会逐一介绍。