美文网首页
Mybatis的一二级缓存

Mybatis的一二级缓存

作者: 大华夏 | 来源:发表于2020-12-01 10:48 被阅读0次

为什么会有一二级缓存

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

一级缓存

image.png

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

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

关闭一级缓

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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <settings>
 <setting name="localCacheScope" value="STATEMENT"/>

 ...

 </settings>

 ...
</configuration>

2.springboot项目关闭一级缓存

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

二级缓存

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

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

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

1.开启二级缓存

mybatisConfig.xml中开启

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <settings>
 <setting name="cacheEnabled" value="true" />
 ...
 </settings>
 ...
</configuration>

springboot中开启

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

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

<mapper namespace="mapper.xxxMapper">
 
 <!-- Cache 配置 -->
 <!-- <cache /> -->
 <!-- <cache
 eviction="FIFO"
 flushInterval="60000"
 size="512"
 readOnly="true" /> -->
 <cache type="org.mybatis.caches.ehcache.EhcacheCache" />
</mapper>

指定查询关闭缓存

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

<select id="selectXXX"
 useCache="false">
 ...
</select>

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

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

相关文章

网友评论

      本文标题:Mybatis的一二级缓存

      本文链接:https://www.haomeiwen.com/subject/lqojwktx.html