【Mybatis】说一下 mybatis 的一级缓存和二级缓存

  

🍎个人博客:个人主页

🏆个人专栏:Mybatis  

⛳️  功不唐捐,玉汝于成



目录

前言

正文

一级缓存(Local Cache):

范围:

生命周期:

默认开启:

二级缓存(Global Cache):

范围:

生命周期:

需要配置:

结语

 我的其他博客


前言

在数据库访问中,性能优化一直是开发者关注的焦点之一。MyBatis 作为一种流行的持久层框架,提供了一级缓存和二级缓存两种缓存机制,以帮助开发者提高数据库查询效率。本文将深入探讨 MyBatis 中的一级缓存和二级缓存的原理、使用方式以及适用场景,帮助开发者更好地理解和应用缓存机制。

正文

MyBatis 中提供了一级缓存(Local Cache)和二级缓存(Global Cache)两种缓存机制,用于提高数据库查询性能。

一级缓存(Local Cache):

  1. 范围:

    1. 一级缓存是基于 SqlSession 的,也就是说在同一个 SqlSession 内部有效。每次通过 SqlSession 执行查询,查询的结果会被缓存到这个 SqlSession 的缓存中。

  2. 生命周期:

    1. 缓存的生命周期很短,当 SqlSession 关闭时,缓存失效。如果在同一个 SqlSession 中执行相同的查询,MyBatis 会直接从一级缓存中获取结果,而不需要再次向数据库发送查询。

  3. 默认开启:

    1. 一级缓存在 MyBatis 中是默认开启的,因此在大多数情况下,开发者无需额外配置即可享受一级缓存的好处。

二级缓存(Global Cache):

  1. 范围:

    1. ​​​​​​​ 二级缓存的范围是跨多个 SqlSession,也就是在同一个应用的多个 SqlSession 之间共享缓存。

  2. 生命周期:

    1. ​​​​​​​ 缓存的生命周期较长,可以在多个 SqlSession 之间共享。当某个 SqlSession 执行了一个更新操作(增、删、改),或者进行了提交(commit)操作时,二级缓存会失效,需要重新加载。

  3. 需要配置:

    1. 二级缓存需要手动配置开启,配置文件中使用 <cache> 元素进行配置,并在需要使用二级缓存的映射文件中添加 <cache-ref> 元素引用全局的缓存。

      <!-- MyBatis 配置文件 -->
      <configuration>
          <!-- 开启二级缓存 -->
          <setting name="cacheEnabled" value="true"/>
          <!-- 使用二级缓存 -->
          <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
      </configuration>
      
      <!-- 映射文件 -->
      <mapper namespace="com.example.mapper.UserMapper">
          <!-- 引用全局的缓存 -->
          <cache-ref namespace="com.example.mapper.UserMapper"/>
          <!-- 具体的 SQL 映射配置 -->
      </mapper>
      

      一级缓存和二级缓存在不同的应用场景中有各自的优劣,合理的使用缓存机制可以有效提升系统性能。需要根据具体的业务需求和数据访问模式来决定是否使用缓存,以及使用何种缓存。

结语

缓存机制在数据库访问中扮演了至关重要的角色,MyBatis 的一级缓存和二级缓存为我们提供了灵活且可控的缓存解决方案。一级缓存适用于同一个 SqlSession 内的数据共享,能够有效减少重复查询,而二级缓存则在多个 SqlSession 之间共享数据,提高了系统整体的性能。在使用缓存时,我们需要根据业务需求和数据特性来选择合适的缓存机制,合理配置缓存的生命周期和失效机制。通过深入理解 MyBatis 缓存的工作原理,开发者能够更好地优化数据库访问,提升系统的性能和响应速度,为用户提供更为流畅的应用体验。

 我的其他博客

【MySQL】数据库规范化的三大法则 — 一探范式设计原则-CSDN博客

【JAVA】线程的run()和start()有什么区别?-CSDN博客

【日常聊聊】程序员必备的面试技巧:如何在面试战场上脱颖而出-CSDN博客

【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁-CSDN博客

【JAVA】怎么确保一个集合不能被修改-CSDN博客

【Web开发】会话管理与无 Cookie 环境下的实现策略-CSDN博客

【Mybatis】Mybatis如何防止sql注入-CSDN博客

【软件工程】航行敏捷之路:深度解析Scrum框架的精髓-CSDN博客

【Spring】理解IoC与AOP:构建灵活而模块化的软件架构-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/328729.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch Tutorial 2.0

这里是对于PyTorch Tutorial-CSDN博客的补充&#xff0c;但是与其相关的NLP内容无关&#xff0c;只是一些基础的PyTorch用法的记录&#xff0c;主要目的是能够自己生成一些模拟的数据集。先介绍随机数的目的是因为based on随机数方法。 当然在看随机数的方法的时候&#xff0c…

彻底解决charles抓包https乱码的问题

最近做js逆向&#xff0c;听说charles比浏览器抓包更好用&#xff0c;结果发现全是乱码&#xff0c;根本没法用。 然后查询网上水文&#xff1a;全部都是装证书&#xff0c;根本没用&#xff01; 最后终于找到解决办法&#xff0c;在这里记录一下&#xff1a; 乱码的根本原因…

c++可调用对象、function类模板与std::bind

函数调用与函数调用运算符 先写一个简单的函数&#xff0c;如下&#xff1a; /*函数的定义*/ int func(int i) {cout<<"这是一个函数\t"<<i<<endl; }void test() {func(1);//函数的调用 } 通过这个普通的函数可以看到&#xff0c;调用一个函数很…

transbigdata 笔记: 官方文档示例3:车辆轨迹数据处理

1 读取数据 轨迹数据质量分析 这一部分和 transbigdata笔记&#xff1a;data_summary 轨迹数据质量/采样间隔分析-CSDN博客 的举例是一样的 import pandas as pd import geopandas as gpd import transbigdata as tbddata pd.read_csv(Downloads/TaxiData-Sample.csv, names…

微服务实战项目_天机学堂01_初识项目

文章目录 一.项目简述二.Jenkins三.模拟真实业务:紧急bug修复和代码阅读四.测试和部署五.代码阅读-获取登录用户 一.项目简述 Q:天机学堂是什么? A:天机学堂是一个基于微服务架构的生产级在线教育项目 主要有两个端(项目已上线,可以点击查看): 管理后台: https://tjxt-admi…

项目配置集成unocss指南

项目配置集成 unocss 指南 什么是 UnoCSS&#xff1f; Unocss 是一个基于 Tailwind CSS的工具 &#xff0c;它通过静态分析 HTML 和 CSS 代码&#xff0c;自动消除未使用的样式&#xff0c;以减小生成的 CSS 文件大小。这个工具可以帮助开发者在使用 Tailwind CSS 进行开发时…

【linux】visudo

碎碎念 visudo命令是用来修改一个叫做 /etc/sudoers 的文件的&#xff0c;用来设置哪些 用户 和 组 可以使用sudo命令。并且使用visudo而不是使用 vi /etc/sudoers 的原因在于&#xff1a;visudo自带了检查功能&#xff0c;可以判断是否存在语法问题&#xff0c;所以更加安全 …

大神们都在用的5款AI写作软件

在当今信息爆炸的时代&#xff0c;写作已经成为了人们生活和工作中不可或缺的一部分。然而&#xff0c;对于许多人来说&#xff0c;写作并不是一件轻松的事情。幸运的是&#xff0c;随着人工智能技术的不断发展&#xff0c;AI写作软件应运而生。这些软件利用先进的自然语言处理…

HTML5:dialog

JavaScript 练手小技巧&#xff1a;HTML5 的 dialog 标签制作对话框_dialog html-CSDN博客 <dialog id"dialog"> <h2 align"center">修改</h2> <input type"text" id"title1" placeholder"标题" value…

【论文阅读笔记】4篇Disentangled representation learning用于图像分割的论文

4篇应用解耦表示学习的文章&#xff0c;这里只关注如何解耦&#xff0c;更多细节不关注&#xff0c;简单记录一下。 1.Robust Multimodal Brain Tumor Segmentation via Feature Disentanglement and Gated Fusion Chen C, Dou Q, Jin Y, et al. Robust multimodal brain tum…

写点东西《最佳 Web 框架不存在 》

写点东西《&#x1f947;最佳 Web 框架不存在 &#x1f6ab;》 TLDR&#xff1b;您选择的 Web 应用程序框架并不重要。嗯&#xff0c;它很重要&#xff0c;但并不像其他人希望您相信的那样重要。 2024 年存在如此多的库和框架&#xff0c;而且最好的库和框架仍然备受争议&…

瑞_Java开发手册_(四)安全规约

&#x1f64a;前言&#xff1a;本文章为瑞_系列专栏之《Java开发手册》的安全规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约&#xff0c;所以本系列专栏主要以这本书进行讲解和拓展&#xff0c;有需要的小伙伴可以点击链接下载。本文仅供大家交流、学习及研…

Kafka 的架构

实验过程 1.三个虚拟机中解压kafka软件包 tar -zxvf kafka_2.11-1.1.1.tgz 2.修改 3 个节点配置文件 在 zookeeper 节点&#xff0c;进入 kafka_2.11-1.1.1/config 目录下&#xff0c;编辑 server.properties 文件 [rootdb1 ~]# cd kafka_2.11-1.1.1/config [rootdb1 con…

使用斐波那契(Fibonacci)数列来测试各大语言的性能

笔者使用最多的语言是C&#xff0c;目前项目中在使用Go&#xff0c;也使用过不少其它语言&#xff0c;像Erlang&#xff0c;Python&#xff0c;Lua&#xff0c;C#等等。最近看到C#夺冠&#xff0c;首次荣获 TIOBE 年度编程语言&#xff0c;同时也看到网上有不少Java与C#之争的文…

Ubuntu 22.04安装使用easyconnect

EasyConnect 百度百科&#xff0c;EasyConnect能够帮助您在办公室之外使用公司内网的所有系统及应用。在您的公司部署深信服远程应用发布解决方案后&#xff0c;您的公司所有业务系统及应用都可以轻松迁移至移动互联网上。您可以通过手机、PAD等智能移动终端随时随地开展您的业…

现代工程科技杂志现代工程科技杂志社现代工程科技编辑部2023年第21期目录

能源科技 配网故障停电原因及改进对策研究 上官安琪 110kV变电站电气自动化技术及应用策略 陈祥 变电运维误操作事故预控措施分析 高翔;韦婉 智能变电站变电运维安全与设备维护探究 温亮亮;覃万全 110kV变电站电气设计及其防雷保护案例研析 谢旭平 变电运维…

Kafka系列(四)

本文接kafka三&#xff0c;代码实践kafkaStream的应用&#xff0c;用来完成流式计算。 kafkastream 关于流式计算也就是实时处理&#xff0c;无时间概念边界的处理一些数据。想要更有性价比地和java程序进行结合&#xff0c;因此了解了kafka。但是本人阅读了kafka地官网&#…

探索 Python:发现有趣的库——第 1 章:数据可视化之旅

在一个充满活力的科技世界中&#xff0c;数据分析专家“算法仙”和编程爱好者“代码侠”相遇了&#xff0c;决定一起踏上数据可视化的探险之旅。他们将运用 Matplotlib 和 Seaborn 这两个强大的 Python 库&#xff0c;将枯燥的数据转化为生动的图形。 算法仙&#xff1a;你好&…

利用先进的条形码识别和 OCR 技术改善机场行李处理

机场每年处理数百万件行李&#xff0c;主要航空公司每家运输超过 1 亿件行李。每年有 2500 万件行李被错误处理&#xff0c;正确处理至关重要。使用最好的技术是关键&#xff0c;首先是从机场到飞机的正确转乘。 行李分拣 Dynamsoft 的客户是一家机场行李分拣解决方案提供商。…

【Linux 内核源码分析】RCU机制

RCU 基本概念 Linux内核的RCU&#xff08;Read-Copy-Update&#xff09;机制是一种用于实现高效读取和并发更新数据结构的同步机制。它在保证读操作不被阻塞的同时&#xff0c;也能够保证数据的一致性。 RCU的核心思想是通过延迟资源释放来实现无锁读取&#xff0c;并且避免了…