Mybatis的一二级缓存

为什么会有一二级缓存

为了减少数据库压力,直接的方式就是减少对数据库的调用,通常来讲只要执行sql的调用,就需要访问数据库,那如果能对sql执行的结果进行缓存,相同的sql执行,从缓存中拿结果,这样就可以减轻数据库压力

一级缓存

image.png

Mybatis的一级缓存默认情况下是开启的,一级缓存与SqlSession进行绑定,也就是针对SqlSession内的sql进行缓存,不同SqlSession相互之间不影响,缓存使用本地内存实现

一级缓存也分两个级别: SESSION和STATEMENT,默认的缓存级别为SESSION。STATEMENT级别是指缓存针对当前执行的查询有效,故每次执行完就清理缓存,即相当于没有缓存。

关闭一级缓

1.存修改全局配置文件mybatisConfig.xml




 
 

 ...

 

 ...

2.springboot项目关闭一级缓存

mybatis:
  configuration:
    local-cache-scope: statement #一级缓存指定为statement级别

二级缓存

Mybatis一二级缓存的使用和实现原理

二级缓存默认情况下是没有开启的,如果开启二级缓存,支持在配置中自定义底层缓存实现,包括使用本地缓存和分布式缓存

基于namespace即作用域为mapper,故需要在每个mapper中配置二级缓存实现及缓存策略,不同namespace乡宦之间不受影响

1.开启二级缓存

mybatisConfig.xml中开启




 
 
 ...
 
 ...

springboot中开启

mybatis:
  configuration:
    cache-enabled: true #禁用二级缓存

2.mapper中配置
cache标签配置二级缓存实现方式,也可以不配置,即使用默认实现


 
 
 
 
 

指定查询关闭缓存

在select标签中使用useCache="false"


一二级缓存项目中是否使用

虽然一二级缓存可以减少数据库查询操作,但加大了数据不一致的情况存在,故实际项目中建议关闭缓存机制,项目根据需要使用第三方缓存,如Redis等

你可能感兴趣的:(Mybatis的一二级缓存)