首页 > 快讯 >

聊聊Mybatis的缓存

2023-01-10 20:19:01 来源:程序员客栈

记得点击"欢少的成长之路",设为星标⭐

后台点击【联系我】,申请加入优质技术学习社群


(资料图片仅供参考)

大家好,我是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存活了一个小时,那么将整个清空一下。

上一篇:

下一篇:

x
推荐阅读

聊聊Mybatis的缓存

日均亏四千,“韭菜”挤爆特斯拉门店,维权、直播的都来了

成渝中线高铁最新消息(持续更新)

京东白条网贷逾期26天还不起影响征信吗-全球快报

过失危险方法危害公共安全罪怎么量刑-新视野

【世界聚看点】你一定会更优秀的句子(精选263句)

华尔街新年,寒气逼人!巨头扎堆裁员!这一知名公司,或裁员数千人

比《蚀骨危情》更虐心,云倾袖的这本文催泪来袭,9.6虐哭老书虫

2023开年暴击,裁员、降薪、调岗和没有年终奖的产品经理们

藏红花是新鲜的好还是陈的好?_世界热讯

01月10日(周二)博弈分析:将逼空到底,调整只在盘中完成 今日快看

优酷过冬,禁止“白嫖”|全球独家

今年养老金调整,企退人员普涨10%,事退人员涨3 %,可行吗?-快播报

租房合同前不想租了不想住了可以全额退款吗-世界报资讯

李震之|香樟赋

在网上买手机和在实体店买手机有什么区别?

促进中小学数字化教育提质增效

全球微头条丨外媒:美国众议院议长选举麦卡锡11连败 特朗普获提名

回迁房过户有协议吗? 今日精选

定向投放个性化广告违规 Meta收爱尔兰3.9亿欧元罚单:环球观察

如何举报虚开发票

【全球快播报】公募怎么选 明星公募基金产品历年收益率

健身房装修效果图健身房装修设计时,需要划分为哪几个区域?

高乐股份于浙江设立新能源科技子公司,经营范围含电池制造

全球观天下!港股1月5日物业股午盘:金融街物业涨3.21%位居首位

每日热门:试车成功!中国航天点燃 2023 年“第一把火”

新资讯:叶黄素胶囊吃多久停一停 叶黄素胶囊一次吃了两颗怎么办

百科知识 什么是猥亵罪猥亵罪判几年

中文百科 内退和正式退休区别在哪

知识问答 当当网上书店购书

权威百科知识 普陀山在哪个省哪个市

生活知识 贡献的意思是什么

知识导航 举报信范本

经验分享 黑金刚是什么东西

经验知识 锅盖头什么意思

知识分享 什么叫养鱼

讲解百科 山地类型

科普知识 上海市黄浦区电信营业厅

知识库 丌怎么读

知识大全 如何实现共赢

世界看点:2023德云社苏州站演出购票指南(时间+价格+须知)

东星医疗董秘回复:公司最近签订了呼吸机的相关订单,具体经营数据请您关注公司定期报告披露的相关内容|焦点速讯

热水袋加热水后有味会有毒吗?-全球实时

美股异动 | 苹果(AAPL.US)跌超3% 需求减弱 苹果三大产品线砍单

当前滚动:鲁抗医药: 鲁抗医药关于2019年股票期权激励计划2022年第四季度自主行权结果暨股份变动的公告

多地宣布:关闭核酸免费点!检测量断崖式下降,一批核酸检测机构或将陷入财务危机

馨怎么组词 馨的组词有哪些

元旦假期成都文旅市场迎“开门红” 冰雪运动游人气旺_环球实时

离婚后父亲患上尿毒症,该不该支付女儿学钢琴的费用?杭州法院这样判:天天热消息

“台湾曼谷”,全球网民都被CNN蠢哭了-速递