Mybatis一级缓存&二级缓存

本文详细解释了MyBatis的一级缓存如何基于内存地址存储数据,以及语句级别和session级别的缓存控制。二级缓存涉及全局缓存配置、存取策略和刷新规则,还介绍了如何通过自定义接口实现Redis缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、一级缓存

sqlsession级别缓存,默认开启;

MyBatis将数据存入一级缓存时,是将对象的引用(内存地址)存入一级缓存;在获取一级缓存中的数据时,MyBatis将返回当初存入一级缓存的那个内存地址值,也就是说,一级缓存中的数据是同一个

一级缓存失效:

  • 将一级缓存的作用域设置为语句级别(localCacheScope设置为STATEMENT,默认为SESSION)
  • 清空缓存(clearCache)
  • 刷新缓存(flushCache)
  • 执行任何增删改操作都会导致整个一级缓存失效
  • session关闭,一级缓存清空

二、二级缓存

全局缓存(可以控制在mapper级别或者sql语句级别(useCache参数)),需要手动开启和配置;

session关闭时,将一级缓存中的数据写入二级缓存。

如果一级&二级缓存同时存在,会先查询二级缓存、再查询一级缓存(如果readOnly=false,存入二级缓存的对象必须实现序列号接口

二级缓存失效:

  • 执行任何的增删改操作,不仅会导致一级缓存清空,也会导致同一个namespace二级缓存清空
  • 刷新缓存(flushCache)

可重写Cache接口,自定义二级缓存(比如使用redis)

参考:MyBatis一级缓存和二级缓存全面详解-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值