什么叫缓存
将数据存放在程序内存中,用于减轻数据查询的压力,提升读取数据的速度,提高性能。
一级缓存
■ 两个级别
SqlSession级别的缓存,实现在同一个会话中数据的共享
Statement级别的缓存,可以理解为缓存只对当前执行的这一个Statement有效,执行完后就会清空缓存
■ 一级缓存的生命周期和SqlSession一致
■ 设置为SqlSession级别的缓存,当执行insert/update/delete操作或close之后,缓存清空
■ MyBatis的一级缓存最大范围是SqlSession内部,有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据,建议设定缓存级别为Statement
二级缓存
■ SqlSessionFactory级别的缓存,实现不同会话中数据的共享,是一个全局变量
■ 存储作用域为Mapper的namespace级别
■ 可自定义存储源,如 EHCache(分布式缓存框架)
■ 当开启缓存后,数据的查询执行的流程就是二级缓存-> 一级缓存 -> 数据库
■ 不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率
■ MyBatis的二级缓存不适应用于映射文件中存在多表查询的情况,如果多个映射文件对应的Sql操作都使用的是同一块缓存,那么缓存的粒度就变粗了,多个Mappernamespace下的所有操作都会对缓存使用造成影响。