MyBatis——一级缓存和二级缓存的区别

什么叫缓存

将数据存放在程序内存中,用于减轻数据查询的压力,提升读取数据的速度,提高性能。

一级缓存

■ 两个级别

SqlSession级别的缓存,实现在同一个会话中数据的共享

Statement级别的缓存,可以理解为缓存只对当前执行的这一个Statement有效,执行完后就会清空缓存

■ 一级缓存的生命周期和SqlSession一致

■ 设置为SqlSession级别的缓存,当执行insert/update/delete操作或close之后,缓存清空

■ MyBatis的一级缓存最大范围是SqlSession内部,有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据,建议设定缓存级别为Statement

二级缓存

■ SqlSessionFactory级别的缓存,实现不同会话中数据的共享,是一个全局变量

■ 存储作用域为Mapper的namespace级别

■ 可自定义存储源,如 EHCache(分布式缓存框架)

■ 当开启缓存后,数据的查询执行的流程就是二级缓存-> 一级缓存 -> 数据库

■ 不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率

■ MyBatis的二级缓存不适应用于映射文件中存在多表查询的情况,如果多个映射文件对应的Sql操作都使用的是同一块缓存,那么缓存的粒度就变粗了,多个Mappernamespace下的所有操作都会对缓存使用造成影响。

推荐一个“美团技术点评团队”写的关于MyBatis缓存机制的分析

https://tech.meituan.com/mybatis_cache.html


猜你喜欢

转载自blog.csdn.net/qq_41541619/article/details/79967172