myabtis的缓存级别
文章目录
- MyBatis缓存的区别是什么
- 作用范围方面有哪些差异
- 生命周期
- 数据进行了存储
- 缓存的优缺点
MyBatis缓存的区别是什么
MyBatis 提供了一级缓存和二级缓存,这两者的主要区别在于其作用范围和生命周期。
- 一级缓存:一级缓存是 SqlSession 级别的缓存。当我们执行查询时,它就会将查询结果缓存起来。当我们再次查询相同的数据,它就会直接从缓存中拉取。一级缓存是默认开启的。一级缓存的生命周期和 SqlSession 保持一致,当 SqlSession 被关闭或者清空,那么一级缓存就会消失
- 二级缓存:二级缓存是命名空间级别的缓存。一个命名空间可以理解为一个 Mapper 文件,即一个 XML 文件。不同的 Mapper 文件可以有不同的命名空间,即使它们都在同一个项目中。二级缓存是可以被多个 SqlSession 共享的。它的生命周期和应用程序保持一致,即应用程序运行期间,二级缓存一直存在。当应用程序关闭后,二级缓存才会消失
注意:使用二级缓存时,需要注意其适用场景。如果数据更新非常频繁,那么使用二级缓存可能不太合适,因为数据即使被更新,缓存中的数据也不会被立即清除,而是等待应用程序关闭后才会消失。这可能会导致数据不一致的问题。
作用范围方面有哪些差异
MyBatis的一级缓存和二级缓存的作用范围有明显的差异。
- 一级缓存是SqlSession级别的缓存,它的作用范围仅限于当前的SqlSession。也就是说,只有同一个SqlSession在执行两次相同的sql时,第一次得到的数据才会被缓存起来,第二次执行时直接从缓存中获取,提高效率。
- 而二级缓存是基于mapper的namespace作用域,但多个SqlSession操作同一个namespace下的sql时,只要传入的参数相同,执行相同的sql语句,第一次执行完毕后,会自动将sql提交并将数据缓存起来。也就是说,二级缓存在多个SqlSession之间共享数据,作用范围更广。
- 以上内容仅供参考,以MyBatis官方文档为准确 。
生命周期
MyBatis的缓存生命周期主要涉及到一级缓存和二级缓存。
- 一级缓存的生命周期和SqlSession保持一致。当开启一个新的数据库会话时,MyBatis会创建一个新的SqlSession对象,其中包含一个用于保存缓存数据的hashMap(以对象的id作为key,对象作为value保存)。当SqlSession执行DML(insert,update,delete)操作并提交到数据库时,MyBatis会清空SqlSession的一级缓存,以保存最新的数据并避免脏读现象。如果SqlSession调用close()方法或者clearCache()方法,一级缓存中的数据会被释放或者清空。
- 二级缓存的生命周期和应用程序保持一致,即应用程序运行期间,二级缓存一直存在。二级缓存是mapper级别的缓存,使用二级缓存时,多个SqlSession使用同一个mapper的sql语句去操作数据库,得到的数据存在二级缓存区域。二级缓存的范围更大,多个SqlSession可以共用二级缓存
以MyBatis官方文档为准确
数据进行了存储
MyBatis的一级缓存和二级缓存存储的数据主要是查询结果的对象。
- 具体来说,一级缓存存储的是单个SqlSession中查询的数据,当同一个SqlSession再次查询相同的数据时,可以直接从缓存中获取,避免了重复的数据库查询操作,提高了效率。
- 而二级缓存存储的是多个SqlSession之间共享的数据,当多个SqlSession查询相同的namespace下的数据时,只要传入的参数相同,执行相同的sql语句,第一次执行完毕后,会自动将sql提交并将数据缓存起来,供其他SqlSession使用,避免了重复的数据库查询操作,提高了效率。
- 需要注意的是,MyBatis的二级缓存只会缓存查询语句,而不会缓存更新、插入、删除等语句。同时,MyBatis的二级缓存是将查询结果对象序列化后存储在硬盘上,读取时需要进行反序列化操作,因此在选择二级缓存时需要考虑到序列化和反序列化的开销。
缓存的优缺点
MyBatis 的一级缓存和二级缓存都有其优缺点
- 优点
- 一级缓存
- 减少读数据库的读操作,降低数据库压力,加快响应速度
- 二级缓存
- 实现了缓存数据的共享,可控性也更强
- 一级缓存
- 缺点
- 一级缓存
- 可能造成数据不一致问题
- 增加成本
- 二级缓存
- 极大可能会出现错误数据
- 安全使用的条件比较苛刻
- 一级缓存
MyBatis 的一级缓存和二级缓存都有其各自的优缺点。在选择使用缓存时,需要根据具体的应用场景和需求权衡这些优缺点,以做出最佳的选择。
相关文章:
myabtis的缓存级别
文章目录 MyBatis缓存的区别是什么作用范围方面有哪些差异生命周期数据进行了存储缓存的优缺点 MyBatis缓存的区别是什么 MyBatis 提供了一级缓存和二级缓存,这两者的主要区别在于其作用范围和生命周期。 一级缓存:一级缓存是 SqlSession 级别的缓存。…...
gin框架再探
Gin框架介绍及使用 | 李文周的博客 (liwenzhou.com) lesson03_gin框架初识_哔哩哔哩_bilibili 1.路由引擎 //路由引擎 rgin.Default() 2.一些http请求方法 get post put delete等等 遇到什么路径,执行什么函数 r.GET("/hello",func{做你想做的事返回…...
经典算法-----约瑟夫问题(C语言)
目录 前言 故事背景 约瑟夫问题 环形链表解决 数组解决 前言 今天我们来玩一个有意思的题目,也就是约瑟夫问题,这个问题出自于欧洲中世纪的一个故事,下面我们就去通过编程的方式来解决这个有趣的问题,一起来看看吧!…...
代码随想录 动态规划Ⅴ
494. 目标和 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可以在 2 之前添加 ,在 1 之前添加 - …...
驱动DAY9
驱动文件 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/gpio.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #incl…...
03贪心:摆动序列
03贪心:摆动序列 376. 摆动序列 局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。 整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。…...
javascript获取元素在浏览器中工作区域的左、右、上、下距离,或带滚动条的元素在页面中的大小
//获取元素在包含元素框中的大小 //第1个函数为获取元素在包含元素中左内边框的距离 function getELementLeft(element){//获取元素在包含元素左边距离var actualeftelement.offsetLeft;//获取元素的上级包含元素var currentelement.offsetParent;//循环到一直没有包含元素whil…...
VSCode 安装使用教程 环境安装配置 保姆级教程
一个好用的 IDE 不仅能提升我们的开发效率,还能让我们保持愉悦的心情,这样才是非常 Nice 的状态 ^_^ 那么,什么是 IDE 呢 ? what IDE(Integrated Development Environment,集成开发环境)是含代码…...
c盘中temp可以删除吗?appdata\local\temp可以删除吗?
http://www.win10d.com/jiaocheng/22594.html C盘AppData文件夹是一个系统文件夹,里面存储着临时文件,各种应用的自定义设置,快速启动文件等。近期有用户发现appdata\local\temp占用了大量的空间,那么该文件可以删除吗?…...
Java手写聚类算法
Java手写聚类算法 1. 算法思维导图 以下是聚类算法的实现原理的思维导图,使用Mermanid代码表示: #mermaid-svg-AK9EgYRS38PkRJI4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AK9EgYRS38…...
解密Java多线程中的锁机制:CAS与Synchronized的工作原理及优化策略
目录 CAS什么是CASCAS的应用ABA问题异常举例 Synchronized 原理基本特征加锁过程偏向锁轻量级锁重量级锁 其他优化操作锁消除锁粗化 CAS 什么是CAS CAS: 全称Compare and swap,字面意思:”比较并交换“,CAS涉及如下操作: 假设内存中的原数据…...
solid works草图绘制与设置零件特征的使用说明
(1)草图绘制 • 草图块 在 FeatureManager 设计树中,您可以隐藏和显示草图的单个块。您还可以查看块是欠定义 (-)、过定义 () 还是完全定义。 要隐藏和显示草图的单个块,请在 FeatureManager 设计树中右键单击草图块,…...
vue3使用router.push()页面跳转后,该页面不刷新问题
文章目录 原因分析最优解决 原因分析 这是一个常见问题,当使用push的时候,会向history栈添加一个新记录,这个时候,再添加一个完全相同的路由时,就不会再次刷新了 最优解决 在页面跳转时加上params参数时间 router.…...
如何理解数字工厂管理系统的本质
随着科技的飞速发展和数字化转型的推动,数字工厂管理系统逐渐成为工业4.0时代的重要工具。数字工厂系统旨在整合和优化工厂运营的各个环节,通过实时数据分析和处理,提升生产效率,降低成本,并增强企业的整体竞争力。为了…...
笔记1.3 数据交换
如何实现数据通过网络核心从源主机到达目的主机? 数据交换 交换网络: 动态转接动态分配传输资源 数据交换类型: (1)电路交换 (2)报文交换 (3)分组交换 电路交换的特…...
实时车辆行人多目标检测与跟踪系统(含UI界面,Python代码)
算法架构: 目标检测:yolov5 目标跟踪:OCSort其中, Yolov5 带有详细的训练步骤,可以根据训练文档,训练自己的数据集,及其方便。 另外后续 目标检测会添加 yolov7 、yolox,目标跟踪会…...
谷歌AI机器人Bard发布强大更新,支持插件功能并增强事实核查;全面整理高质量的人工智能、机器学习、大数据等技术资料
🦉 AI新闻 🚀 谷歌AI机器人Bard发布强大更新,支持插件功能并增强事实核查 摘要:谷歌的人工智能聊天机器人Bard发布了一项重大更新,增加了对谷歌应用的插件支持,包括 Gmail、Docs、Drive 等,并…...
NI SCXI-1125 数字量控制模块
NI SCXI-1125 是 NI(National Instruments)生产的数字量控制模块,通常用于工业自动化和控制系统中,以进行数字输入和输出控制。以下是该模块的一些主要产品特点: 数字量输入:SCXI-1125 模块通常具有多个数字…...
链表oj题1(Leetcode)——移除链表元素,反转链表,链表的中间节点,
链表OJ 一,移除链表元素1.1分析1.2代码 二,找到链表的中间节点2.1分析2.2代码 三,反转链表3.1分析3.2代码 四,找到链表中倒数第k个节点4.1分析4.2代码 一,移除链表元素 移除链表元素 1.1分析 这里的删除要分成两种…...
【libuv】与uvgrtrp的_SSIZE_T_定义不同
libuv的 #if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED) typedef intptr_t ssize_t;...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
