MySQL缓存、MyBatis缓存

一、MySQL

1、何时缓存:

  • 缓存的 key:SQL (所以sql语句要完全相同才能使用上缓存)
    缓存的 value:结果集
  • where条件中如包含了某些函数永远不会被缓存, 比如current_date, now等
  • 太大的结果集不会被缓存

2、何时缓存失效:

  • 表数据有任何修改,则有关于该表的数据全部失效

二、MyBatis

1、一级缓存,一级缓存是SqlSession级别的缓存,对于相同的查询,会从缓存中返回结果而不是查询数据库
作用域是SqlSession
2、二级缓存,二级缓存是Mapper级别的缓存,定义在Mapper文件的标签中并需要开启此缓存,多个Mapper文件可以共用一个缓存,依赖标签配置。
作用域是一个NameSpace( 一般情况下一个NameSpace即一个Mapper)
二级缓存不建议使用,因为二级缓存有严重的使用问题:
例如:
MapperA联合查询AB表中数据
MapperA:select from tableA left join tableB on ……
MapperB修改了数据
MapperB:insert into tableB values ……
由于MapperA和MapperB不在同一个作用域,即使MapperB新增了数据,MapperA缓存也不会刷新,造成MapperA查到的数据是脏数据。

你可能感兴趣的:(数据库)