日期:2023-01-12 06:52:25 来源:程序员客栈
记得点击"欢少的成长之路",设为星标⭐
(资料图片仅供参考)
后台点击【联系我】,申请加入优质技术学习社群
大家好,我是Leo。
好久没有输出技术理论了,实在是忙。最近主要以设计系统为主了。面试刚好又倒在了Mybatis原理。今天来聊一下Mybatis的一级缓存,二级缓存。
Mybatis缓存是内存中的数据,主要是对数据库查询结果的保存,使用缓存的好处是避免频繁与数据库进行交互,提升查询的响应速度。
数据库缓存扩展聊到Mybatis缓存。我们可以扩展聊一下MySQL缓存。MySQL缓存其实与Mybatis类似,在查询的时候都会先通过查询缓存检查一下所需的数据是否存在缓存中,如果存在缓存的话就会直接返回,这样就达到了避免频繁与数据库进行交互的目的。
数据查询流程图
回归正题在学习过程中,希望大家把知识点串起来学习,这样有助力更好的学习与理解
Mybatis 缓存主要分一级缓存和二级缓存。
一级缓存一级缓存也称为本地缓存(SqlSession),属于二级缓存的子集。与数据库同一次会话期间查询到的数据会放在本地缓存中。以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库。
一级缓存的缓存数据只在SqlSession内有效,它的范围有两种SESSION和STATEMENT,默认是SESSION。如果不想使用一级缓存,可以通过下列代码配置
使用SESSION,这样每次执行完一个Mapper中的语句都会将一级缓存清除。二级缓存
一级缓存作用域太低,如果多个SqlSession需要共享缓存,则就需要开启二级缓存。二级缓存也叫全局缓存,二级缓存是基于namespace级别的缓存,一个namespace对应一个二级缓存。二级缓存需要我们手动开启。
我们可以通过在 mybatis-config 文件中配置开启二级缓存。
查询顺序
Mybatis的查询顺序如下图
Mybatis查询顺序
我们可以根据上图大概介绍一下B的流程。
首先创建SqlSession会话查询一条数据,这条数据就会被放到当前会话的一级缓存中。如果当前SqlSession去执行commit操作(插入,更新,删除),那么就会清空SqlSession中的一级缓存,保证缓存中始终保存的是最新的数据,避免脏读。这个时候并不会把一级缓存更新到二级缓存,这一步操作是在关闭SqlSession时触发的。新会话查询信息,就会从二级缓存中获取数据。注意:两次查询必须在同一个SqlSession中完成,否则将不会走Mybatis的一级缓存
相反,我们在使用Mybatis作为我们的持久层框架时,也就是上图的A流程
开启二级缓存后,会使用 CachingExecutor 装饰 Executor进入一级缓存查询流程前先在CachingExecutor进行二级缓存的查询如果二级缓存没有命中的话会到一级缓存中查询最后一级缓存没有的话才会去与数据库进行查询交互生命周期二级缓存开启后,同一个 namespace 下的所有操作语句,都影响着同一个 Cache,即二级缓存被多个 SqlSession 共享,是一个全局的变量。
MyBatis 是默认关闭二级缓存的,因为对于增删改操作频繁的话,那么二级缓存形同虚设,每次都会被清空缓存。
一级缓存没有过期时间,只有生命周期。MyBatis在开启一个数据库会话时,会创建一个新的SqlSession对象,SqlSession对象中会有一个Executor对象,Executor对象中持有一个PerpetualCache对象。当会话结束时,SqlSession对象及其内部的Executor对象还有PerpetualCache对象也一并释放掉。
二级缓存有过期时间,但没有后台线程进行检测。需要注意的是,并不是key-value的过期时间,而是这个cache的过期时间,是flushInterval,意味着整个清空缓存cache,所以不需要后台线程去定时检测。每当存取数据的时候,都有检测一下cache的生命时间,默认是1小时,如果这个cache存活了一个小时,那么将整个清空一下。
聊聊Mybatis的缓存_全球观热点
天天视点!亿纬锂能:2022年净利同比预增10%-25%
世界热消息:东方电热(300217.SZ):成为合众新能源某项目PTC电加热器总成供应商
【“疫情防控”曝光台】不戴口罩!曝光!
微博借钱网贷逾期二个月会不会上征信
世界时讯:上证指数推演,明天继续看第4浪回调,还有第5浪新高?
环球观天下!长城汽车(02333.HK):“长汽转债”转股价格调整为39.76元/股
证人出庭作证需要多长时间
陆金贷(大额普惠)借款逾期35年会上征信系统吗
通过债务纠纷买房怎么处理呢? 天天热门
世界热推荐:“第三支箭”落地月余涉房并购大单持续涌现 2023年将成房地产行业并购重组大年?
盘点十大明星医药企业,净利润最高的竟然是它 环球热资讯
民进党3个麻烦若交相纠缠,沈富雄:2024“他”要怎么选?_全球独家
今日热门!巴西总统卢拉强烈谴责博索纳罗支持者强闯国家权力机构
火箭科学和官僚主义——2022年国外航天发射的一些事件回顾_全球即时
天天速看:肯德基资深食家测试版上线,一起来挑战极限闯关吧!
开车撞人应付怎样的刑事责任?-全球观察
1月8日全面放开入境,同程旅行出入境机票订单达近三年峰值 快报
官宣!交易达成,绿军送走中锋,马刺裁两人,9号秀出身曾轰12+19-环球速读
1分钱、1小时、一站式,京东首次打造“超级京城”同城年货节 世界新视野
全球今热点:吊打RTX 3080 iGame RTX 4070 Ti火神视频评测
全球滚动:西青区14岁小孩抚养费一般给多少
网购品牌机竟是拼装货?警方捣毁3个窝点揭开制假售假全链条
天天视点!e点贷网贷逾期10天延迟还款征信会怎么样
当前动态:正虹科技董秘回复:公司生猪养殖完全成本请您参见公司定期报告相关数据信息