只针对框架支持 Mybatis 二级缓存的设计进行说明,想深入了解 Mybatis 缓存原
理请阅读 Mybatis 缓存详细设计文档
1. Mybatis 缓存概要说明
一级缓存:
只是相对于同一个 SqlSession 而言。所以在参数和 SQL 完全一样的情
况下,我们使用同一个 SqlSession 对象调用一个 Mapper 方法,往往只执行一次
SQL 因为使用 SqlSession 第一次查询后,MyBatis 会将其放在缓存中,以后再查询
的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession 都会取
出当前缓存的数据,而不会再次发送 SQL 到数据库,在没有配置的情况下,
Mybatis 默认开启一级缓存。
二级缓存:Application 级别的缓存,它可以提高对数据库查询的效率,以提高应用
的性能。SqlSessionFactory 层面上的二级缓存默认是不开启的,二级缓存的开启需
要进行配置,实现二级缓存的时候,MyBatis 要求返回的 POJO 必须是可序列化的。
也就是要求实现 Serializable 接口,配置方法很简单,只需要在映射的 XML 文件配
置就可以开启缓存了
。
分布式二级缓存:假设现在有两个服务器 1 和 2,用户访问的时候访问了 1 服务器,
查询后的缓存就会放在 1 服务器上,假设现在有个用户访问的是 2 服务器,那么他
在 2 服务器上就无法获取刚刚那个缓存,为了解決这个问题,就得找一个分布式的
缓存,专门用来存储缓存数据的,这样不同的服务器要缓存数据都往它那里存,取
缓存数据也从它那里取。
2. 后端开发框架二级缓存使用说明
1) Spring Boot 项目如果需要打开 Mybatis 二级缓存,需要在配置文件中增加配
置项:mybatis.configuration.cache-enabled=true
2) 缓存策略配置:配置文件中设置缓存大容量 mybatis.cache.max-size=xxx 默
认值为 512,存活时间 mybatis.cache.ttl=xxx 默认值 86400 秒
3) 在需要启用缓存的主 mapper.xml 文件里增加
MybatisRedisCache 类为框架提供的基于 redis 分布式缓存设计的 Cache
4) 如果同一个 namespace 下有多个 mapper 文件,增加的文件需要增加
如果没有配置 flushCache、useCache,那么默认是启用缓存的。
fushCache 默认为 false,表示任何时候语句被调用,都不会去清空本地缓存和
二级缓存。
useCache 默认为 true,表示会将本条语句的结果进行二级缓存。
在 insert、update、delete 语句时:flushCache 默认为 true,表示任何时候语
句被调用,都会导致本地缓存和二级缓存被清空。useCache 属性在该情况下
没有。update 的时候如果 flushCache="false”,则当你更新后,查询的数据还
是老的数据。
6) 代码生成器生成的 select 语句默认 useCache="false"不启用二级缓存,在于查
询条件过于灵活,缓存命中率低,所以不建议缓存。一般建议启用二级缓存的
查询都在***Ex-mapper.xml 中定义,具有一定入参限制的查询。
3. 注意事项
1) 只能在【只有单表操作】的表上使用缓存
不只是要保证这个表在整个系统中只有单表操作,而且和该表有关的全部操作必须
全部在一个 namespace 下。
针对一个表的某些操作不在他独立的 namespace 下进行。例如在 UserMapper.xml
中有大多数针对 user 表的操作。但是在一个 xxxMapper.xml 中,还有针对 user 单
表 的 操 作 。 这 会 导 致 user 在 两 个 命 名 空 间 下 的 数 据 不 一 致 。 如 果 在
UserMapper.xml 中做了刷新缓存的操作,在 xxxMapper.xml 中缓存仍然有效,如果
有针对 user 的单表查询,使用缓存的结果可能会不正确。更危险的情况是在
xxxMapper.xml 做了 insert,update,delete 操作时,会导致 UserMapper.xml 中的各种
操作充满未知风险。有关这样单表的操作可能不常见。但是你也许想到了一种常见
的情况。多表操作一定不能使用缓存。
2) 在可以保证查询远远大于 insert,update,delete 操作的情况下使用缓存。你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
创新互联公司主营灌阳网站建设的网络公司,主营网站建设方案,成都app软件开发公司,灌阳h5小程序制作搭建,灌阳网站营销推广欢迎灌阳等地区企业咨询
分享题目:Mybatis二级缓存设计说明-创新互联
文章源于:http://chengdu.cdxwcx.cn/article/cohshj.html