MyBatis 缓存机制
创始人
2024-02-08 06:38:25

文章目录

    • 一、一级缓存
    • 二、二级缓存
      • 1.cache 元素
      • 2.缓存命中率

一、一级缓存

MyBatis 的一级缓存是 SqlSession 级别的缓存。如果同一个 SqlSession 对象多次执行完全相同的 SQL 语句,在第一次执行完成后,MyBatis 会将查询结果写入一级缓存中,此后,如果程序没有执行插入、更新和删除操作,当第二次再执行相同的查询语句时,MyBatis 会直接读取一级缓存中的数据,而不用再去数据库查询,从而提高了数据库的查询效率。

在这里插入图片描述

那么我们怎么知道第二次它没有操作数据库呢?
可以通过日志组件来查看一级缓存的工作状态,因此第一步需要在 pom.xml 中引入日志依赖。

log4jlog4j1.2.17

第二步在 resources 目录下创建 log4j.properties 文件,注意文件名必须只能是 log4j.properties。

#全局日志配置
log4j.rootLogger=DEBUG,Console
#控制台输出配置
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#日志输出级别,只展示了一个
log4j.logger.java.sql.PreparedStatement=DEBUG

增删改会导致一级缓存的清空!

二、二级缓存

相同的 Mapper 类,相同的 SQL 语句,如果 SqlSession 不同,则两个 SqlSession 查询数据库时,会查询数据库两次,这样也会降低数据库的查询效率。为了解决这个问题,就需要用到 MyBatis 的二级缓存。MyBatis 的二级缓存是 Mapper 级别的缓存,与一级缓存相比,二级缓存的范围更大,多个 SqlSession 可以共用二级缓存,并且二级缓存可以自定义缓存资源。
在 MyBatis 中,一个 Mapper.xml 文件通常称为一个 Mapper,MyBatis 以 namespace 区分 Mapper,如果多个 SqlSession 对象使用同一个 Mapper 的相同查询语句去操作数据库,在第一个 SqlSession 对象执行完后,MyBatis 会将查询结果写入二级缓存,此后,如果程序没有执行插入、更新、删除操作,当第二个 SqlSession 对象执行相同的查询语句时,MyBatis 会直接读取二级缓存中的数据。

在这里插入图片描述
同样,增删改查操作会清空二级缓存!

1.cache 元素

与 MyBatis 的一级缓存不同的是,MyBatis 的二级缓存需要手动开启,开启二级缓存通常要完成以下两个步骤:
① 在 MyBatis 的核心配置文件 MybatisConfig.xml 文件中通过 settings 元素开启二级缓存的全局配置;



② 开启当前 Mapper 的 namespace 下的二级缓存,可以通过 MyBatis 映射文件中的 cache 元素来完成。




默认状态下的二级缓存可实现的功能:
① 映射文件中所有的 select 语句将会被缓存;
② 映射文件中的所有 insert、update 和 delete 语句都会刷新缓存;
③ 缓存会使用 LRU 算法回收;
④ 没有刷新间隔,缓存不会以任何时间顺序来刷新;
⑤ 缓存会存储列表集合或对象的1024个引用;
⑥ 缓存是可读/可写的缓存,这意味着对象检索不是共享的,缓存可以安全的被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

以上是二级缓存在默认状态下的特性,如果需要调整上述特性,可以通过 cache 元素的属性来实现。

在这里插入图片描述

其中,eviction 属性有四个可选值:
① LRU,最近最少使用的策略,移除最长时间不被使用的对象;
② FIFO,先进先出策略,按对象进入缓存的顺序来移除它们;
③ SOFT,软引用策略,移除基于垃圾回收器状态和软引用规则的对象;
④ WEAK,弱引用策略,更积极地移除基于垃圾收集器状态和弱引用规则的对象。

在第一次查询结束时释放 SqlSession,将数据写入二级缓存,session1.close()!

2.缓存命中率

终端用户访问存储时,如果在缓存中查找到了要被访问的数据,就叫做命中。当多次执行查询操作时,缓存命中次数与总的查询次数(缓存命中次数+缓存没有命中次数)的比,就叫做缓存命中率,即缓存命中率=缓存命中次数/总的查询次数。当 MyBatis 开启二级缓存后,第一次查询数据时,由于数据还没有进入缓存,所以需要在数据库中查询而不是在缓存中查询,此时缓存命中率为0,第一次查询过后,MyBatis 会将查询到的数据写入缓存中,当第二次再查询相同的数据时,MyBatis会直接从缓存中获取这条数据,缓存将命中,此时的缓存命中率为0.5,当第三次查询相同的数据,则缓存命中率为0.6666,以此类推。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...