聊聊Mybatis的缓存
记得点击"欢少的成长之路",设为星标⭐
后台点击【联系我】,申请加入优质技术学习社群
(相关资料图)
大家好,我是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存活了一个小时,那么将整个清空一下。
- 知识 所谓的东东是什么意思
- 知识 山东曹县是什么梗
- 徐州荣凯为南京荣盛置业提供不超过11亿元担保
- 天房发展收上交所问询函 包含转让吉利大厦44.81%股权事项
- 合景泰富回应整售写字楼:公司正常计划,并非为筹资
- 美好置业:延期至6月28日前回复深交所问询函
- 青岛公积金新政:首套住房贷款额度最高可达80万元
- 杭州:无房职工家庭公积金贷款购房最高可贷120万元
- 我爱我家全资持股上海相寓企业集团 后者注册资本2.5亿
- 龙湖集团副总裁温介邦已离职 此前兼任工程安全管理团队负责人
-
碧桂园拟以现金要约回购今年到期的6.834亿美元票据
6月15日晚间,碧桂园发布公告称,公司计划以现金要约购买于2022年到期的尚未赎回4 75%优先票据。公告显示,上述票据在新交所上市,将于6月2
-
万科连续12个交易日回购约9.61亿元股份
6月15日,万科企业(02202 HK)发布翌日披露报表。于2022年6月15日,万科回购86 6万股A股,回购价格为17 75-17 99元,共耗资约1545 8万元。5
-
我爱我家:太和先机质押2.25亿股股份 占总股本9.55%
6月14日,我爱我家发布关于公司控股股东所持部分股份质押的公告。公告显示,为办理股票质押式回购交易进行融资,西藏太和先机投资管理有限
-
1-5月房屋新开工面积51628万平方米 下降30.6%
6月15日,国家统计局发布房地产数据显示,1-5月份,房屋新开工面积51628万平方米,下降30 6%。其中,住宅新开工面积37782万平方米,下降31
-
1-5月全国房地产开发投资52134亿元 同比下降4%
6月15日,国家统计局发布房地产数据显示,1-5月份,全国房地产开发投资52134亿元,同比下降4%。其中,住宅投资39521亿元,下降3%。
-
1-5月商品房销售面积50738万平方米 同比下降23.6%
6月15日,国家统计局发布房地产数据显示,1-5月份,商品房销售面积50738万平方米,同比下降23 6%;其中,住宅销售面积下降28 1%。商品房销售
-
1-5月房地产开发企业到位资金60404亿元 同比下降25.8%
6月15日,国家统计局发布房地产数据显示,1-5月份,房地产开发企业到位资金60404亿元,同比下降25 8%。其中,国内贷款8045亿元,下降26 0%;
-
女童不慎掉入20米深井 18岁小姨三次下井成功营救
陕西一女童不慎掉入20米深井 18岁小姨三次下井成功营救 中新网西安12月28日电 (记者 梅镱泷)记者28日从陕西消防了解到,近日,该
-
云南清水河边检站查获走私玉石和玉石毛料65公斤
中新网临沧12月28日电 (徐媛 雷珍玉)记者28日从云南清水河出入境边防检查站获悉,该站近日在清水河口岸查获一起利用货车藏匿走私玉石
-
新疆现代“织女”巧手织就幸福生活
中新社乌鲁木齐12月28日电 (苟继鹏 张尚坤)“我的爸爸、妈妈、姐姐都是纺织工人,受他们影响,2020年10月,我大学毕业后也应聘到一
X 关闭
我爱我家:太和先机质押2.25亿股股份 占总股本9.55%
1-5月房屋新开工面积51628万平方米 下降30.6%
1-5月全国房地产开发投资52134亿元 同比下降4%
1-5月商品房销售面积50738万平方米 同比下降23.6%
1-5月房地产开发企业到位资金60404亿元 同比下降25.8%
X 关闭
行银易贷网贷逾期17天延迟还款影响征信吗_全球播报
小鲨易贷贷款逾期18年还不起会影响征信吗:世界焦点
花鸭借钱贷款逾期13个月延迟还款征信会怎么样
全球观热点:夫妻贷款买的房子离婚时怎么分割?
让第一动力澎湃发力——科技创新一线观察
(相关资料图)