记得点击"欢少的成长之路",设为星标⭐
(资料图片仅供参考)
后台点击【联系我】,申请加入优质技术学习社群
大家好,我是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的缓存
记得点击 "欢少的成长之路 ",设为星标⭐后台点击【联系我】,申请加入优质技术学习社群大家好,我是Leo。好久没有输出技术理论了,实在是忙。
-
瑞迪智驱:核心技术奠定先发优势,业绩高成长的先进制造黑马 天天动态
据深交所官网披露信息显示,深交所创业板上市委员会定于2023年1月12日召开2023年第2次上市委员会审议会议,届时将审核成都瑞迪智驱科技股份有
-
2023 年各技术栈 Roadmap 新鲜出炉|天天最新
roadmap sh是一个不错的网站,是经社区努力,旨在创建各类技术栈的路线图、指南和其他教育内容,以帮助指导开发人员选择路径并指导他们的学习
-
工行融e借逾期七个月会影响征信吗_环球动态
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
-
全球聚焦:国有大型银行板块1月9日跌0.23%,建设银行领跌,主力资金净流出1.93亿元
1月9日国有大型银行板块较上一交易日下跌0 23%,建设银行领跌。当日上证指数报收于3176 08,上涨0 58%。深证成指报收于11450 15,上涨0 72%。
-
小赢钱包网贷逾期九年影响征信吗 环球聚看点
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
-
11部门发文 事关农房质量安全提升|天天信息
近日,住房和城乡建设部、财政部、自然资源部、农业农村部、应急管理部等11部门印发《农房质量安全提升工程专项推进方案》。方案明确,到2025
-
景泰县生小孩的产假是多久 天天最新
国家规定产假98天,符合条件的可享受产假180天。
-
2022年12月全球航天发射活动统计分析 世界资讯
2022年12月全球航天发射活动统计分析文|《卫星与网络》编辑整理一、航天发射动态消息(1)俄罗斯太空部队发射一颗Lotos-S军事侦察卫星北京时间2022年
-
钻戒品牌“I Do”为何走到生死边缘?
近日,钻戒品牌“I Do”母公司恒信玺利实业股份(以下简称:恒信玺
-
今日热闻!被猫抓出血了怎么办 被猫抓出血了如何处理
1、被猫抓流血需要对伤口进行清洗、消毒,并及时接种狂犬疫苗。2、被猫抓流血属于Ⅲ级暴露,有感染狂犬病的风险。首先应当在流动水下使用肥皂
-
香港特区政府成功发售57.5亿美元绿色债券_要闻速递
香港特区政府成功发售57 5亿美元绿色债券
-
全球视讯!外资疯狂扫货,食品饮料大涨超3.8%
今日市场早盘高开高走,北向资金半日净流入超百亿,食品饮料领涨申万一级行业,白酒板块大爆发,迎驾贡酒、古井贡酒涨超7%,口子窖、泸州老窖
-
75的酒精冰点是多少?
75酒精-65℃结冰,纯酒精的凝固点是-117℃,含有水的酒精溶液凝固点会升高,凝固点是晶体物质凝固时的温度,不同晶体具有不同的凝固点,同一种
-
天天热点评!刘强东所怒斥的,真的是PPT吗?
四年前,明州事件闹得沸沸扬扬,刘强东逐渐慢慢淡出人们的视线,他趁机调整了京东的经营策略,把权利交给高管弟兄们。四年后,刘强东在面向京
-
高分之作《婚不厌诈:大叔别太猛》优质片段让人赞不绝口_聚看点
第三章凌霄不喜欢你沉寂的冷家老宅在晨曦升起就开始人声鼎沸,仆人有条不紊地确认着婚宴的每一个细节流程。冷家作为虞城最大的家族,冷家三少
-
天天观察:中集集团:当前东盟地区呈经济复苏态势,是全球经济中少数较为稳定的区域之一
中集集团(000039)01月06日在投资者关系平台上答复了投资者关心的问题。
-
同仁堂1月6日盘中跌幅达5%
以下是同仁堂在北京时间1月6日14:04分盘口异动快照:1月6日,同仁堂盘中跌幅达5%,截至14点04分,报42 28元,成交8 48亿元,换手率1 44%。注:
-
焦点速递!2023北京朝阳梧桐湾嘉苑和梧桐港嘉苑选房咨询热线是多少?
➤2023北京朝阳梧桐湾嘉苑和梧桐港嘉苑选房咨询热线010-67389778(上午9:00-11:30,下午14:00-17:00)➤须交纳的购房定金完成选房后
-
每日时讯!母子赏雪被困山顶 浙江百人进山成功营救
本文转自:杭州网来自上海的驴友张某被“小红书”里的寒林雪景图所吸引,为了在温婉的南方领略“北国风光”,12月31日,张某和好友结伴,带着