Skip to main content

缓存

一级缓存

  • 作用域是sqlSession,默认开启,可以关闭
  • 有一个session对应一个executor对象
  • 这个对象里有一个 PerpetualCache localCache 的数据结构存储缓存数据
  • 会根据查询语句和参数生成一个唯一的键(CacheKey)

场景

  • 在无事务无手动创建sqlSession的情况下,一级缓存的作用似乎不明显
  • 在有事务的情况下,可以做到可重复读的效果

一级缓存与数据库的隔离级别

  • 在读已提交级别,mybtatis的一级缓存可能会造成观测不一致
    • 一级缓存会使一次事务中的读的值相同,如果不加缓存,一次事务中可以读到其他事务提交的值

如何关闭一级缓存

mybatis:
# MyBatis 全局配置
configuration:
# 明确一级缓存作用域(默认 session)
local-cache-scope: STATEMENT

二级缓存

  • 作用域是mapper,默认关闭,可以开启
  • 可以自定义缓存实现,使用类似MyBatis-Redis的集成包,或者自己实现Cache接口