当前位置: 首页 > news >正文

myabtis的缓存级别

文章目录

  • MyBatis缓存的区别是什么
  • 作用范围方面有哪些差异
  • 生命周期
  • 数据进行了存储
  • 缓存的优缺点

MyBatis缓存的区别是什么

MyBatis 提供了一级缓存和二级缓存,这两者的主要区别在于其作用范围和生命周期。

  1. 一级缓存:一级缓存是 SqlSession 级别的缓存。当我们执行查询时,它就会将查询结果缓存起来。当我们再次查询相同的数据,它就会直接从缓存中拉取。一级缓存是默认开启的。一级缓存的生命周期和 SqlSession 保持一致,当 SqlSession 被关闭或者清空,那么一级缓存就会消失
  2. 二级缓存:二级缓存是命名空间级别的缓存。一个命名空间可以理解为一个 Mapper 文件,即一个 XML 文件。不同的 Mapper 文件可以有不同的命名空间,即使它们都在同一个项目中。二级缓存是可以被多个 SqlSession 共享的。它的生命周期和应用程序保持一致,即应用程序运行期间,二级缓存一直存在。当应用程序关闭后,二级缓存才会消失

注意:使用二级缓存时,需要注意其适用场景。如果数据更新非常频繁,那么使用二级缓存可能不太合适,因为数据即使被更新,缓存中的数据也不会被立即清除,而是等待应用程序关闭后才会消失。这可能会导致数据不一致的问题。

作用范围方面有哪些差异

MyBatis的一级缓存和二级缓存的作用范围有明显的差异。

  1. 一级缓存是SqlSession级别的缓存,它的作用范围仅限于当前的SqlSession。也就是说,只有同一个SqlSession在执行两次相同的sql时,第一次得到的数据才会被缓存起来,第二次执行时直接从缓存中获取,提高效率。
  2. 而二级缓存是基于mapper的namespace作用域,但多个SqlSession操作同一个namespace下的sql时,只要传入的参数相同,执行相同的sql语句,第一次执行完毕后,会自动将sql提交并将数据缓存起来。也就是说,二级缓存在多个SqlSession之间共享数据,作用范围更广。
  3. 以上内容仅供参考,以MyBatis官方文档为准确 。

生命周期

MyBatis的缓存生命周期主要涉及到一级缓存和二级缓存。

  1. 一级缓存的生命周期和SqlSession保持一致。当开启一个新的数据库会话时,MyBatis会创建一个新的SqlSession对象,其中包含一个用于保存缓存数据的hashMap(以对象的id作为key,对象作为value保存)。当SqlSession执行DML(insert,update,delete)操作并提交到数据库时,MyBatis会清空SqlSession的一级缓存,以保存最新的数据并避免脏读现象。如果SqlSession调用close()方法或者clearCache()方法,一级缓存中的数据会被释放或者清空。
  2. 二级缓存的生命周期和应用程序保持一致,即应用程序运行期间,二级缓存一直存在。二级缓存是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语言)

目录 前言 故事背景 约瑟夫问题 环形链表解决 数组解决 前言 今天我们来玩一个有意思的题目,也就是约瑟夫问题,这个问题出自于欧洲中世纪的一个故事,下面我们就去通过编程的方式来解决这个有趣的问题,一起来看看吧&#xff01…...

代码随想录 动态规划Ⅴ

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贪心&#xff1a;摆动序列 376. 摆动序列 局部最优&#xff1a;删除单调坡度上的节点&#xff08;不包括单调坡度两端的节点&#xff09;&#xff0c;那么这个坡度就可以有两个局部峰值。 整体最优&#xff1a;整个序列有最多的局部峰值&#xff0c;从而达到最长摆动序列。…...

javascript获取元素在浏览器中工作区域的左、右、上、下距离,或带滚动条的元素在页面中的大小

//获取元素在包含元素框中的大小 //第1个函数为获取元素在包含元素中左内边框的距离 function getELementLeft(element){//获取元素在包含元素左边距离var actualeftelement.offsetLeft;//获取元素的上级包含元素var currentelement.offsetParent;//循环到一直没有包含元素whil…...

VSCode 安装使用教程 环境安装配置 保姆级教程

一个好用的 IDE 不仅能提升我们的开发效率&#xff0c;还能让我们保持愉悦的心情&#xff0c;这样才是非常 Nice 的状态 ^_^ 那么&#xff0c;什么是 IDE 呢 &#xff1f; what IDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;是含代码…...

c盘中temp可以删除吗?appdata\local\temp可以删除吗?

http://www.win10d.com/jiaocheng/22594.html C盘AppData文件夹是一个系统文件夹&#xff0c;里面存储着临时文件&#xff0c;各种应用的自定义设置&#xff0c;快速启动文件等。近期有用户发现appdata\local\temp占用了大量的空间&#xff0c;那么该文件可以删除吗&#xff1f…...

Java手写聚类算法

Java手写聚类算法 1. 算法思维导图 以下是聚类算法的实现原理的思维导图&#xff0c;使用Mermanid代码表示&#xff1a; #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&#xff0c;字面意思:”比较并交换“&#xff0c;CAS涉及如下操作&#xff1a; 假设内存中的原数据…...

solid works草图绘制与设置零件特征的使用说明

&#xff08;1&#xff09;草图绘制 • 草图块 在 FeatureManager 设计树中&#xff0c;您可以隐藏和显示草图的单个块。您还可以查看块是欠定义 (-)、过定义 () 还是完全定义。 要隐藏和显示草图的单个块&#xff0c;请在 FeatureManager 设计树中右键单击草图块&#xff0c;…...

vue3使用router.push()页面跳转后,该页面不刷新问题

文章目录 原因分析最优解决 原因分析 这是一个常见问题&#xff0c;当使用push的时候&#xff0c;会向history栈添加一个新记录&#xff0c;这个时候&#xff0c;再添加一个完全相同的路由时&#xff0c;就不会再次刷新了 最优解决 在页面跳转时加上params参数时间 router.…...

如何理解数字工厂管理系统的本质

随着科技的飞速发展和数字化转型的推动&#xff0c;数字工厂管理系统逐渐成为工业4.0时代的重要工具。数字工厂系统旨在整合和优化工厂运营的各个环节&#xff0c;通过实时数据分析和处理&#xff0c;提升生产效率&#xff0c;降低成本&#xff0c;并增强企业的整体竞争力。为了…...

笔记1.3 数据交换

如何实现数据通过网络核心从源主机到达目的主机&#xff1f; 数据交换 交换网络&#xff1a; 动态转接动态分配传输资源 数据交换类型&#xff1a; &#xff08;1&#xff09;电路交换 &#xff08;2&#xff09;报文交换 &#xff08;3&#xff09;分组交换 电路交换的特…...

实时车辆行人多目标检测与跟踪系统(含UI界面,Python代码)

算法架构&#xff1a; 目标检测&#xff1a;yolov5 目标跟踪&#xff1a;OCSort其中&#xff0c; Yolov5 带有详细的训练步骤&#xff0c;可以根据训练文档&#xff0c;训练自己的数据集&#xff0c;及其方便。 另外后续 目标检测会添加 yolov7 、yolox&#xff0c;目标跟踪会…...

谷歌AI机器人Bard发布强大更新,支持插件功能并增强事实核查;全面整理高质量的人工智能、机器学习、大数据等技术资料

&#x1f989; AI新闻 &#x1f680; 谷歌AI机器人Bard发布强大更新&#xff0c;支持插件功能并增强事实核查 摘要&#xff1a;谷歌的人工智能聊天机器人Bard发布了一项重大更新&#xff0c;增加了对谷歌应用的插件支持&#xff0c;包括 Gmail、Docs、Drive 等&#xff0c;并…...

NI SCXI-1125 数字量控制模块

NI SCXI-1125 是 NI&#xff08;National Instruments&#xff09;生产的数字量控制模块&#xff0c;通常用于工业自动化和控制系统中&#xff0c;以进行数字输入和输出控制。以下是该模块的一些主要产品特点&#xff1a; 数字量输入&#xff1a;SCXI-1125 模块通常具有多个数字…...

链表oj题1(Leetcode)——移除链表元素,反转链表,链表的中间节点,

链表OJ 一&#xff0c;移除链表元素1.1分析1.2代码 二&#xff0c;找到链表的中间节点2.1分析2.2代码 三&#xff0c;反转链表3.1分析3.2代码 四&#xff0c;找到链表中倒数第k个节点4.1分析4.2代码 一&#xff0c;移除链表元素 移除链表元素 1.1分析 这里的删除要分成两种…...

【libuv】与uvgrtrp的_SSIZE_T_定义不同

libuv的 #if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED) typedef intptr_t ssize_t;...

从网页地图卡顿说起:深入理解瓦片加载与前端性能优化(Leaflet/Mapbox实战)

从网页地图卡顿说起&#xff1a;深入理解瓦片加载与前端性能优化&#xff08;Leaflet/Mapbox实战&#xff09; 当用户在地图应用中频繁缩放拖拽却遭遇卡顿、白屏时&#xff0c;体验会瞬间崩塌。作为前端开发者&#xff0c;我们该如何从底层机制入手解决这些问题&#xff1f;本文…...

Navicat导入Excel实战:从数据准备到成功入库的完整避坑指南

1. 数据准备&#xff1a;Excel规范整理实战 第一次用Navicat导入Excel时&#xff0c;我对着报错提示整整折腾了两小时。后来才发现&#xff0c;90%的问题都出在数据准备阶段。就像做饭前要洗菜切配&#xff0c;数据导入前也需要做好这些准备工作&#xff1a; 字段命名要像给变量…...

Java开发者收藏 | 你的经验不是负担,而是转型AI应用开发的加速器!

本文为Java开发者提供了清晰的AI应用开发转型路径。强调Java后端经验在AI领域是宝贵财富而非负担&#xff0c;并介绍了拥抱AI的优势。文章提出了分阶段学习路线&#xff0c;涵盖基础概念、框架选型&#xff08;Spring AI、LangChain4j、Spring AI Alibaba&#xff09;、可视化工…...

CSP-J/S 2020 真题精讲:从“优秀的拆分”看二进制位运算的实战应用

1. 从“优秀的拆分”理解二进制位运算的妙用 第一次看到这道题时&#xff0c;我完全被"优秀的拆分"这个说法吸引了。题目要求我们把一个正整数拆分成不同的2的正整数次幂之和&#xff0c;听起来有点抽象对吧&#xff1f;让我用一个生活中的例子来解释&#xff1a;假设…...

基于fnos-apps框架构建智能对话应用:从技能编排到生产部署

1. 项目概述&#xff1a;一个为现代对话应用而生的开源工具箱最近在折腾一个基于大语言模型的客服机器人项目&#xff0c;在集成各种外部工具和API时&#xff0c;遇到了一个老生常谈的问题&#xff1a;每个工具都有自己的调用方式、认证逻辑和错误处理&#xff0c;代码里很快就…...

从服务器到手机:手把手教你修改游戏客户端IP,让私服在手机上跑起来

移动游戏私服客户端IP修改实战指南 当你在服务器上成功部署了游戏私服后&#xff0c;最令人沮丧的莫过于发现手机上的官方客户端无法连接到你的私人服务器。这个看似简单的"最后一公里"问题&#xff0c;往往成为许多私服搭建者的拦路虎。本文将彻底解决这个痛点&…...

写论文软件哪个好?2026 实测:真文献 + 实证图表 + 全流程,虎贲等考 AI 才是毕业论文通关王

每到毕业季&#xff0c;“写论文软件哪个好” 就成为本硕生最纠结的问题。市面上工具看似繁多&#xff0c;却大多藏着隐患&#xff1a;通用 AI 编造文献、无实证支撑&#xff1b;小众工具功能碎片化、格式混乱&#xff1b;传统软件效率低、无智能辅助…… 选错软件&#xff0c;…...

收藏!小白程序员快速入门大模型:多模态LLMs学习指南

多模态大模型&#xff08;MLLMs&#xff09;通过整合图像、文本、语音等&#xff0c;实现跨模态理解和生成。文章介绍了MLLMs的基本概念、架构&#xff0c;包括多模态编码器、连接器与LLM&#xff0c;并区分了双编码器架构和基于LLM的架构。同时&#xff0c;文章探讨了VLM前沿动…...

高性能服务架构缓存设计:Redis+Caffeine

&#x1f449; 这是一个或许对你有用的社群&#x1f431; 一对一交流/面试小册/简历优化/求职解惑&#xff0c;欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料&#xff1a; 《项目实战&#xff08;视频&#xff09;》&#xff1a;从书中学&#xff0c;往事上…...

Cesium三维地形剖切与开挖:从原理到可复用组件封装

1. 为什么需要地形剖切与开挖功能&#xff1f; 在三维地理信息系统中&#xff0c;地形剖切与开挖是最常用的分析功能之一。想象一下&#xff0c;你正在规划一条地下隧道&#xff0c;或者需要分析某处地质构造&#xff0c;这时候如果能把地表"切开"查看内部情况&#…...