缓存
一级缓存
- 作用域是sqlSession,默认开启,可以关闭
- 有一个session对应一个executor对象
- 这个对象里有一个
PerpetualCache localCache
的数据结构存储缓存数据 - 会根据查询语句和参数生成一个唯一的键(CacheKey)
场景
- 在无事务无手动创建sqlSession的情况下,一级缓存的作用似乎不明显
- 在有事务的情况下,可以做到可重复读的效果
一级缓存与数据库的隔离级别
- 在读已提交级别,mybtatis的一级缓存可能会造成观测不一致
- 一级缓存会使一次事务中的读的值相同,如果不加缓存,一次事务中可以读到其他事务提交的值
如何关闭一级缓存
mybatis:
# MyBatis 全局配置
configuration:
# 明确一级缓存作用域(默认 session)
local-cache-scope: STATEMENT
二级缓存
- 作用域是mapper,默认关闭,可以开启
- 可以自定义缓存实现,使用类似
MyBatis-Redis
的集成包,或者自己实现Cache
接口