首页 > 其他分享 >Mybatis的缓存机制

Mybatis的缓存机制

时间:2024-08-20 21:27:11浏览次数:8  
标签:缓存 数据库 二级缓存 MyBatis SqlSession Mybatis 机制 三级

目录

1. 一级缓存

2. 二级缓存

3. 三级缓存

4.小结


MyBatis 的缓存机制分为一级缓存、二级缓存和三级缓存。

1. 一级缓存

一级缓存是 MyBatis 会话级别的缓存,也称为本地缓存。每个 SqlSession 会维护自己的一级缓存。在同一个 SqlSession 中,如果执行查询操作,对于相同的 SQL 语句,MyBatis 会先在这个会话的一级缓存中查找,如果找到就直接返回,而不再去执行数据库查询。一级缓存的作用范围是 SqlSession 的生命周期。

2. 二级缓存

二级缓存是 MyBatis 全局范围内的缓存,允许多个 SqlSession 共享同一个缓存。二级缓存的配置和使用需要在 MyBatis 的配置文件中进行设置。可以通过配置 `mapper` 中的 `cache` 标签来启用二级缓存。一旦启用,MyBatis 会将查询结果放入二级缓存中,这样不同的 SqlSession 就可以共享这些缓存的查询结果,从而减少对数据库的访问。

3. 三级缓存

实际上,MyBatis 并没有官方文档提到“三级缓存”的概念,通常我们所说的三级缓存是指:

(1)本地的 JVM 缓存:指的是应用程序的内存结构,例如 HashMap 等。

(2)二级缓存:由 MyBatis 提供,允许在 SqlSession 间共享的缓存。

(3)数据库缓存:比如数据库系统自带的查询缓存。

如果看到“三级缓存”,其实通常指的是整合了本地缓存、MyBatis 的二级缓存以及数据库自身的缓存。具体实现通常依赖于应用程序的架构和使用的数据库的特性。

4.小结

(1)一级缓存:(SqlSession 内部)是自动的,不需要额外配置。
(2)二级缓存:(个 SqlSession 之间)相对复杂,需要手动配置。
(3)三级缓存:的概念不属于 MyBatis 的专有术语,但可以理解为应用程序缓存与数据库自身的缓存机制。

在使用缓存时,需要注意数据的一致性和过期策略,以避免缓存击穿和缓存污染等问题。对于频繁更新的数据,可能不适合使用缓存。

标签:缓存,数据库,二级缓存,MyBatis,SqlSession,Mybatis,机制,三级
From: https://blog.csdn.net/m0_65347933/article/details/141368785

相关文章

  • 利用缓存优化网络性能:技术、策略与实践
    摘要缓存是提高网络性能的重要技术之一,它通过减少数据加载时间、降低服务器负载和网络带宽消耗,从而加速内容的交付速度。本文将详细探讨缓存的工作原理、不同类型的缓存机制、以及如何在Web开发和网络架构中有效利用缓存。1.缓存的基本概念缓存是一种将数据暂存的技术,以......
  • Netty 异步任务模型 及 Future-Listener 机制
    https://cloud.tencent.com/developer/article/2246990一、Netty模型二、异步模型三、Future-Listener机制四、Future-Listener机制代码示例 以服务器端为例1.线程池:Netty模型核心就是两个线程池,BossGroup线程池和WorkerGroup线程池;①BossGroup......
  • 深入理解TCP选择性确认(SACK):优化网络传输的机制
    摘要TCP(传输控制协议)是互联网上使用最广泛的协议之一,用于在不可靠的网络环境中提供可靠的数据传输服务。然而,在某些情况下,如网络拥塞或丢包,TCP的默认重传机制可能会导致不必要的性能下降。为了解决这个问题,TCP引入了选择性确认(SACK)机制。本文将详细介绍SACK的概念、工作原......
  • JVM 类加载机制
    类加载器2.1.1简介分类说明启动类加载器负责加载<JAVA_HOME>\lib目录中的核心类库,如resources.jar等;负责加载被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库;这个加载器是C++编写的,随着JVM启动。扩展类加载器负责加载<JAVA_HOME>\lib\ext目录中的类......
  • Java中stream流的filter机制理解
    一开始我并不理解,为什么filter接受一个实现了Predicate接口的对象后,就能通过重写的test方法来筛选元素,这个将筛选后的元素放到新的流中,我并不知道如何实现的。后来我发现ReferencePipeline抽象类中重写了filter方法,并且Collection中的stream方法返回的是StreamSupport.stream方法......
  • mybatis多层嵌套 xml记录一下
     @DatapublicfinalclassWorldimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateintid=0;privatename=null;}@DatapublicfinalclassProvinceimplementsSerializable{privatestaticfinallong......
  • 【第66课】Java安全&SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 深入理解Java虚拟机(类加载机制)
    文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/类加载机制类加载机制的过程是什么呢?JVM把描述类的数据从Class文件中加载到内存中,并对其进行校验,解析,初始化......
  • STP(角色选举、状态、定时器、拓扑变更机制、PVST、PVST+增强特性)
    文章目录一、什么是STP定义特点工作原理专业术语二、STP角色选举1、配置命令:2、端口角色:三、STP的状态四、STP的定时器①HelloTime:2s②MaxAge:20s③ForwardDelay:15s④AgingTime:300s五、STP拓扑变化机制六、PVST七、PVST+增强特性......
  • 深入分析与解决方案:缓存与数据库双写不一致问题
    我们上次探讨了Redis的常见问题,本章将深入分析更细致的细节,例如如何从业务角度有效处理缓存与数据库之间的双写不一致问题。接下来,让我们深入研究这个话题。key重建优化开发人员通常使用“缓存+过期时间”的策略,以便既能加速数据读写,又能确保数据的定期更新。这种模式基本上能......