0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

mybatis一级缓存和二级缓存的原理

科技绿洲 来源:网络整理 作者:网络整理 2023-12-03 11:55 次阅读

MyBatis是一种轻量级的持久化框架,它提供了一级缓存和二级缓存的机制来优化数据库操作性能。一级缓存是默认开启的,而二级缓存需要手动配置启用。

一、一级缓存
1.1 缓存生命周期

一级缓存存在于SqlSession的生命周期中,当SqlSession关闭时,一级缓存也会被清空。

1.2 缓存实现机制

一级缓存采用了基于PerpetualCache的HashMap来实现,使用一个Map对象来保存缓存的数据。当执行相同的查询时,MyBatis会首先寻找一级缓存中是否存在对应的缓存数据,如果存在则直接返回,否则通过数据库查询获取数据并放入缓存中。

1.3 缓存命中条件

缓存的命中条件比较严格,需要满足以下条件:

同一个SqlSession。
相同的查询语句。
参数也要相同。

如果其中有一个条件不满足,将会导致缓存失效。

1.4 缓存清空

一级缓存有以下几种清空方式:

通过调用SqlSession的clearCache()方法手动清空缓存。
执行任何的数据更新操作(insert、update、delete),会自动清空缓存。

二、二级缓存
2.1 缓存生命周期

二级缓存的生命周期和SqlSessionFactory相同,当应用程序关闭时,二级缓存也会被销毁。

2.2 缓存实现机制

二级缓存也采用了基于PerpetualCache的HashMap来实现,但是它是一个全局的缓存,多个SqlSession之间可以共享这个缓存。

2.3 缓存命中条件

二级缓存的命中条件与一级缓存相同。

2.4 缓存清空

二级缓存的清空需要手动配置。在映射文件(Mapper)中的标签内设置flushCache="true",可以在执行任何的数据更新操作后自动清空二级缓存。

2.5 配置二级缓存

在MyBatis的配置文件中配置二级缓存,需要在标签内添加以下配置:


并在映射文件(Mapper)中的标签内进行更多的配置。

三、一级缓存和二级缓存的比较和使用场景

3.1 一级缓存的优势和劣势

优势:

一级缓存是默认启用的,使用起来非常方便。
一级缓存存储在SqlSession内部,读写速度非常快。

劣势:

一级缓存只能在同一个SqlSession中共享,无法在多个SqlSession之间共享。
一级缓存的生命周期比较短,当SqlSession关闭时缓存也会被清空。

3.2 二级缓存的优势和劣势

优势:

二级缓存是全局的,多个SqlSession之间可以共享。
二级缓存的生命周期和应用程序相同。

劣势:

需要手动配置和启用二级缓存。
二级缓存的读写速度相对于一级缓存要慢一些。

3.3 使用场景

一级缓存适用于以下情况:

数据库查询操作多且频繁。
数据更新操作少且不频繁。
数据库查询结果经常被重复使用。

二级缓存适用于以下情况:

多个SqlSession之间需要共享缓存数据。
数据更新操作较少。

总结:
MyBatis的一级缓存和二级缓存主要是为了提高数据库操作性能而设计的两个机制。一级缓存是默认开启的,在SqlSession的生命周期内有效,使用方便但局限性较大。二级缓存需要手动配置启用,为全局缓存,多个SqlSession之间可以共享数据,使用较为灵活。根据具体的应用场景和需求,可以灵活选择合适的缓存策略来提高应用的性能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 缓存
    +关注

    关注

    1

    文章

    220

    浏览量

    26436
  • 数据库
    +关注

    关注

    7

    文章

    3584

    浏览量

    63346
  • MAP
    MAP
    +关注

    关注

    0

    文章

    47

    浏览量

    15005
  • mybatis
    +关注

    关注

    0

    文章

    57

    浏览量

    6646
收藏 人收藏

    评论

    相关推荐

    CPU二级缓存打开器-加速

    CPU二级缓存打开器-加速软件简介:般的CPU在出厂时都是没有真正打开二级缓存的!就像你吃馒头,你可以吃4个,但吃了会觉得太饱,但也不会有什么大的伤 害!^_^而CPU也是,为了降低损坏率,
    发表于 03-02 17:04

    求大神指点 关于fpga实现数据的二级缓存

    如论文所示,应该如何实现二级缓存处理呢?四路信号是有pi/4相位差的方波信号
    发表于 06-21 18:29

    HVM的缓存控制与内存管理

    入口的格式: 页表入口 页表入口用于定义特定内存页的虚拟-逻辑转换。虚页表入口可指定一级缓存上的4MB或16MB的转换,下图显示了相应的格式页表入口(L1-4MB) 页表入口(L1-16MB) 第二级页表
    发表于 09-20 10:19

    Java程序员笔记之mybatis结合redis实战二级缓存

    Java程序员笔记——mybatis结合redis实战二级缓存
    发表于 06-10 09:15

    二级缓存致性

    裸机下运行多核程序,开128KB的二级缓存时,结果没问题,但是开了256KB的二级缓存时,结果出现偏差,请问这种问题该怎么排查解决
    发表于 08-24 21:40

    L220高速缓存控制器技术参考手册

    当处理器产生大量内存流量时,添加片上二级缓存(也称为二级二级缓存)是提高基于ARM的系统性能的公认方法。根据定义,二级缓存假定存在与处理器紧密耦合或内部的
    发表于 08-02 15:09

    L210高速缓存控制器技术参考手册

    当中央处理器(CPU)产生大量内存流量时,添加片上二级缓存(也称为二级缓存,L2CC)是提高计算机系统性能的公认方法。根据定义,二级缓存假定存在与CPU紧密耦合或内部的一级
    发表于 08-02 13:11

    CPU二级缓存容量

    CPU二级缓存容量            CPU缓存(Cache Memory)是位
    发表于 12-24 10:22 485次阅读

    什么是联合并行处理二级缓存

    什么是联合并行处理二级缓存? 联合并行处理二级缓存是(set-associative)将二级缓存划分不同的片段,在每一片段中包含许多缓存线
    发表于 02-04 10:34 299次阅读

    什么是CPU一级缓存/二级缓存

    什么是CPU一级缓存/二级缓存?  即L1 Cache。集成在CPU内部中,用于CPU在处理数据过程中数据的暂时保存。由于缓存指令和数据与CPU
    发表于 02-04 10:43 1023次阅读

    Mybatis缓存一级缓存

    本文主要讲mybatis一级缓存一级缓存是SqlSession级别的缓存
    发表于 11-27 20:44 1075次阅读
    <b class='flag-5'>Mybatis</b><b class='flag-5'>缓存</b>之<b class='flag-5'>一级</b><b class='flag-5'>缓存</b>

    一级缓存二级缓存、三级缓存区别是什么 详解它们的区分方法

    一级缓存(Level 1 Cache)简称L1 Cache,位于CPU内核的旁边,是与CPU结合最为紧密的CPU缓存,也是历史上最早出现的CPU缓存
    发表于 08-14 09:27 7.8w次阅读

    怎样启用CPU的二级缓存 如何查看二级缓存的参数

    提到二级缓存容量的差距,还得从两大CPU巨头对一级缓存的理解说起。对,没看错,就是平常曝光率远逊于二级缓存的“一级
    的头像 发表于 08-14 10:20 1w次阅读

    如何检测cpu二级缓存是否损坏 详解二级缓存对CPU性能影响

    综上所述,在CPU性能方面,并非只从二级缓存容量上作对比就可以得到准确的答案,实际上还要考虑到缓存的总体设计结构、一级数 据缓存容量等因素。
    发表于 08-14 10:39 9352次阅读
    如何检测cpu<b class='flag-5'>二级缓存</b>是否损坏 详解<b class='flag-5'>二级缓存</b>对CPU性能影响

    CPU缓存的作用及原理有哪些

    CPU缓存是位于CPU与内存之间的临时存储器,它的容量比内存小很多,但交换速度比内存要快很多。 CPU缓存分为三类:一级缓存—L1、二级缓存
    的头像 发表于 08-27 15:58 9533次阅读