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

说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?

大家好,我是锋哥。今天分享关于【说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?】面试题。希望对大家有帮助;

说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

MyBatis 和 Spring 都提供了缓存机制,以提高数据访问效率和系统性能。但它们的缓存机制有所不同,且彼此之间并没有直接的关联。为了更好地理解两者的缓存机制,我们可以分别探讨 MyBatis 的一、二级缓存和 Spring 的缓存,以及它们的关系。

MyBatis 一、二级缓存

1. MyBatis 一级缓存
  • 概念:一级缓存是 MyBatis 中的 默认缓存,它是 SqlSession(会话级)作用域内的缓存。每次执行 SQL 查询时,MyBatis 会先查找一级缓存中是否已有查询结果,如果有,则直接返回缓存中的结果,否则执行 SQL 查询并将结果缓存到一级缓存中。
  • 作用域:一级缓存的作用域是 SqlSession,即在同一个 SqlSession 中多次查询相同的数据时,第一次查询会将数据缓存在一级缓存中,第二次查询相同的数据时直接从一级缓存中读取。
  • 清空时机:一级缓存会在以下几种情况下被清空:
    • 当前 SqlSession 关闭时;
    • 显式调用 SqlSession.clearCache() 清空缓存;
    • 执行更新、删除或插入操作后,缓存会自动失效。
2. MyBatis 二级缓存
  • 概念:二级缓存是 跨 SqlSession 共享的缓存,默认是禁用的,可以通过配置启用。二级缓存的作用范围是 Mapper(或映射文件)级别。即当一个 SqlSession 查询结果存储在二级缓存中后,其他的 SqlSession 如果执行相同的查询,也可以从二级缓存中获取数据。
  • 实现方式:二级缓存是通过配置的 Cache 来实现的。你可以在 MyBatis 配置文件中启用二级缓存,也可以为每个 Mapper 配置是否使用二级缓存。
  • 清空时机:二级缓存会在以下情况下被清空:
    • 数据库中的数据发生变化(例如:执行了更新、删除或插入操作);
    • SqlSession 在提交或回滚时会同步到二级缓存;
    • 显式调用 Mapper.clearCache() 清空缓存。

Spring 一、二级缓存

Spring 本身并没有提供类似 MyBatis 那样的一级、二级缓存机制。Spring 的缓存机制通常是指 Spring Cache(自 Spring 3.1 引入的缓存抽象),它是一个跨层的缓存管理机制,支持对方法执行结果进行缓存。Spring 允许使用不同的缓存实现(如:EhCache、Redis、Caffeine、SimpleMap 等),并通过注解(例如 @Cacheable)来定义缓存规则。

1. Spring Cache 级别
  • 方法级缓存:Spring 缓存机制的核心是基于方法的缓存,当方法被调用时,如果方法的参数未发生变化,则会从缓存中获取结果。这个缓存作用于方法调用级别,与 MyBatis 的缓存概念不同。
  • 配置:Spring Cache 可以通过配置缓存管理器(CacheManager)和缓存提供者(如 Redis、EhCache 等)来使用。你可以通过注解(例如 @Cacheable)来启用缓存,也可以通过 XML 或 Java 配置进行更细粒度的管理。
2. Spring 的缓存不同于 MyBatis 的一级、二级缓存
  • 跨层级缓存:Spring 的缓存更像是跨服务层的缓存(例如,业务层、数据访问层等),用于缓存方法的结果。它并不直接涉及到数据库查询缓存或持久化层级的缓存管理。
  • 配置和存储:Spring 提供了抽象的缓存层,可以使用不同的缓存存储介质(如数据库、Redis、内存缓存等),而 MyBatis 的缓存机制则局限于 SQL 查询结果和会话级别的缓存。

MyBatis 一、二级缓存和 Spring 缓存的关系

  1. 作用范围不同

    • MyBatis 的一级缓存是会话级别的缓存,二级缓存是 Mapper 级别的缓存,主要与数据库查询和 SQL 会话的生命周期有关。
    • Spring 缓存 是面向方法调用的缓存,通常与应用层的业务逻辑有关,而不是特定的 SQL 查询。
  2. 缓存内容不同

    • MyBatis 的缓存 专注于 SQL 查询结果缓存,优化数据库查询性能。
    • Spring 的缓存 主要是缓存方法的返回值,用于减少重复计算或避免重复的外部服务调用。
  3. 没有直接关系

    • Spring 和 MyBatis 的缓存机制是相互独立的。你可以在一个 Spring 项目中同时使用 MyBatis 的缓存和 Spring 的缓存机制,它们不会直接干扰对方。
    • 例如,你可以使用 Spring Cache 来缓存某些业务逻辑方法的返回值,同时使用 MyBatis 的二级缓存来缓存 SQL 查询的结果。
  4. 协同工作

    • 在某些场景下,你可能希望 Spring 的缓存和 MyBatis 的缓存协同工作。例如,Spring 缓存可以用于缓存一些业务逻辑的结果,而 MyBatis 的缓存可以缓存数据库查询的结果,二者的协同可以进一步提升系统性能。
    • 如果你使用 Spring 和 MyBatis 集成,并且使用了二级缓存,你可以通过 Spring 的 @Cacheable 和 MyBatis 的二级缓存共同缓存不同层级的数据,进一步减少数据库查询的频率。

总结

  • MyBatis 的一级缓存和二级缓存 是与 SQL 查询和数据库会话相关的缓存机制,主要用于减少数据库查询的次数,一级缓存是会话级缓存,二级缓存是跨会话共享的缓存。
  • Spring 缓存 是一种方法级的缓存机制,主要用于缓存方法执行的结果,优化应用层逻辑的性能,它不直接涉及数据库查询缓存。
  • 两者的缓存机制是独立的,但可以在同一项目中同时使用,互不干扰,甚至可以协同工作以提高系统的性能。

相关文章:

说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?

大家好,我是锋哥。今天分享关于【说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?】面试题。希望对大家有帮助; 说说MyBatis一、二级缓存和Spring一二级缓存有什么关系? 1000道 互联网大厂Java工程师 精选面试题-Java资源…...

蓝桥杯题型分布2

蓝桥杯 蓝桥杯题型分类2素数孪生素数素数个数朴素筛法求素数线性筛法求素数 因数分解试除法分解质因数 等差素数列梅森素数组素数素数环找素数(分段筛)连续素数和小明的素数对疑似素数质数拆分纯质数超级质数质数日期质数游戏2魔法阵的能量阿坤老师切割年糕阶乘分解…...

北京交通大学第三届C语言积分赛

作者有言在先: 题解的作用是交流思路,不是抄作业的。可以把重点放在思路分析上而不是代码上,毕竟每个人的代码风格是不一样的,看别人的代码就跟做程序填空题一样。先看明白思路再看代码。 还有就是,deepseek真的很好用…...

ESP32学习 -从STM32工程架构进阶到ESP32架构

ESP32与STM32项目文件结构对比解析 以下是对你提供的ESP32项目文件结构的详细解释,并与STM32(以STM32CubeIDE为例)的常见结构进行对比,帮助你理解两者的差异: 1. ESP32项目文件解析 文件/目录作用STM32对应或差异set…...

vue响应式原理剖析

一、什么是响应式? 我们先来看一下响应式意味着什么?我们来看一段代码: m有一个初始化的值,有一段代码使用了这个值; 那么在m有一个新的值时,这段代码可以自动重新执行; let m = 20 console.log(m) console.log(m * 2)m = 40上面的这样一种可以自动响应数据变量的代码机…...

【HTML 基础教程】HTML 元素

HTML 文档由 HTML 元素定义。 HTML 元素 开始标签 *元素内容结束标签 *<p>这是一个段落</p><a href"default.htm">这是一个链接</a><br>换行 *开始标签常被称为起始标签&#xff08;opening tag&#xff09;&#xff0c;结束标签常称…...

解锁智能制造新体验:兰亭妙微 UE/UI 设计赋能行业变革

在智能制造时代的滚滚浪潮中&#xff0c;企业的数字化转型不仅是技术的革新&#xff0c;更是用户体验与交互界面的全面升级。然而&#xff0c;许多制造企业在这一转型过程中&#xff0c;面临着一系列 UI/UE 设计难题&#xff0c;严重阻碍了企业的数字化发展进程。兰亭妙微凭借专…...

Element UI实现表格全选、半选

制作如图所示的表格全选、半选&#xff1a; 父组件 <template><div id"app"><SelectHost :hostArray"hostArray" /></div> </template><script> import SelectHost from ./components/SelectHost.vue export default…...

如何使用动作捕捉系统训练人形机器人

随着人形机器人变得越来越先进&#xff0c;使用动作捕捉系统教会它们如何像人类一样移动成为了人形机器人领域正在研究的全新方向。本文探讨了如何使用Xsens技术捕捉精确的人类运动数据&#xff0c;使机器人能够通过人工智能和机器学习安全高效地学习、适应和执行复杂任务。 近…...

Vue.js 和 Vue 3 全面详解指南

1. Vue.js 基础介绍 1.1 什么是 Vue.js Vue.js(简称 Vue)是一个用于构建用户界面的渐进式 JavaScript 框架。与其他框架不同,Vue 被设计为可以逐步采用。Vue 的核心库只关注视图层,易于上手,便于与其他库或既有项目整合。 Vue 由尤雨溪(Evan You)在 2014 年创建。尤雨…...

OpenRAND可重复的随机数生成库

OpenRAND 是一个 C++ 库,旨在通过提供强大且可复制的随机数生成解决方案来促进可重复的科学研究。它是一个简单的仅头文件库,性能可移植,统计稳健,并且易于集成到任何 HPC 计算项目中。 特征 跨平台支持:OpenRAND 旨在跨各种平台无缝工作,包括 CPU 和 GPU。其仅标题库设计…...

内网渗透技术 Docker逃逸技术(提权)研究 CSMSF

目录 如何通过上传的webshell判断当前环境是否是物理环境还是Docker环境 方法一&#xff1a;检查文件系统 方法二&#xff1a;查看进程 方法三&#xff1a;检查网络配置 方法四&#xff1a;检查环境变量 方法五&#xff1a;检查挂载点 总结 2. 如果是Docker环境&#x…...

生活电子常识——cmd不能使用anaconda的python环境,导致输入python打开应用商店

前言 电脑已经安装了anaconda,从自带的Anaconda Prompt (Anaconda3)中是可以识别python环境的&#xff0c;然而切换到cmd时&#xff0c;突然发现cmd中无法识别anaconda的python环境&#xff0c;竟然打开了应用商店让我安装Python&#xff0c;这当然是不对的。 解决 这是因为…...

如何在linux中部署dns服务 主备dns (详细全过程)

环境centos 7.9 主DNS&#xff1a;192.168.60.131 备DNS&#xff1a;192.168.60.134 我以 chenxingyu0.com 指向 192.168.60.200为例 首先是主dns #!/bin/bash# 检查是否为 root 用户 if [ "$(id -u)" ! "0" ]; thenecho "请使用…...

Oracle到达梦数据库迁移:技术要点与实践分享

一、达梦数据库简介 达梦数据库(DM,Dameng Database)是国内自主研发的具有自主知识产权的大型通用数据库管理系统,具备以下显著特点: 1.高性能:高效的存储与计算分离架构:达梦数据库采用先进的存储与计算分离架构,能够根据业务需求灵活分配存储和计算资源,大大提高了…...

word写latex-Mathtype安装成功-方法

MathType安装报错 想在word写latexMathtype, 网上搜教程安装&#xff0c; 结果一直报错一直删重来&#xff0c; 一直报错一直删了重来 一直报错一直删了重来来来&#xff0c; 就这么反反复复一直不好 网上的教程都是教你不是删mathtype, 就是删office 时代变了啊&#x…...

【踩坑日记】springboot 打包后实现类无法找到

试过了所有改什么目录 依赖 clean都以失败告终 最后将实现类的文件名从Impl改成impl宣布成功 记得使用idea自带的重构...

deepseek(2)——deepseek 关键技术

1 Multi-Head Latent Attention (MLA) MLA的核心在于通过低秩联合压缩来减少注意力键&#xff08;keys&#xff09;和值&#xff08;values&#xff09;在推理过程中的缓存&#xff0c;从而提高推理效率&#xff1a; c t K V W D K V h t c_t^{KV} W^{DKV}h_t ctKV​WDKVht​…...

Linux (Centos7)安装Mongodb4.0.28

一、官网下载安装包上传到服务器系统 官网&#xff1a;https://www.mongodb.com/try/download/community 放在/opt/software目录下&#xff1a; 二、解压至/usr/local目录下&#xff0c;并重新命名为mongodb [rootlocalhost software]# tar -zxvf mongodb-linux-x86_64-rhel7…...

数据库设计-笔记4

1.操作词汇简介 insert&#xff1a;用于向表中插入新记录。 delete&#xff1a;用于从表中删除记录。 update&#xff1a;用于修改表中已有的记录。 select&#xff1a;用于从表中检索数据。 2.代码基础(增删改&#xff09; -- 修改表中的信息 -- 修改表名 alter table s…...

基于python的图书管理系统设计与实现

摘要 21世纪的今天&#xff0c;随着计算机技术和网络技术的的不断推广发展和应用&#xff0c;图书馆管理方式也应该随之而更新&#xff0c;借由人力进行繁杂重复的图书管理工作已经不再可取&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0…...

10-- 网络攻击防御原理全景解析 | 从单包攻防到DDoS军团作战(包你看一遍全记住)

&#x1f6e1;️ 网络攻击防御原理全景解析 | 从单包攻防到DDoS军团作战 如果你也对网络工程师的内容感兴趣的话&#xff0c;欢迎看我的最新文章9–BGP路由黑洞&#xff08;超万字大解析&#xff09;&#xff1a;网络世界的“百慕大三角“逃生指南(BGP路由配置实验含路由黑洞,…...

RAG专栏:向量数据库

一、数据库分类 键值数据库&#xff08;Key-Value&#xff09;&#xff1a;通常用于简单的数据存储&#xff0c;通过键来快速访问数据。文档数据库&#xff08;Document&#xff09;&#xff1a;用于存储文档结构的数据&#xff0c;如 JSON 格式。图数据库&#xff08;Graph&a…...

【GPUStack】【dify】【RAGflow】:本地部署GPUStack并集成到dify和RAGflow

目录 Nvidia-Driver CUDA NVIDIA Container Toolkit&#xff08;新版本的docker不用安装&#xff0c;自带&#xff09; Docker 部署GPUStack Text Embeddings 部署模型库模型 测试 部署开源模型&#xff08;modelscope&#xff09; dify 集成 RAGflow集成 Nvidia-Dri…...

第12章:优化并发_《C++性能优化指南》notes

优化并发 一、并发基础与优化核心知识点二、关键代码示例与测试三、关键优化策略总结四、性能测试方法论多选题设计题答案与详解多选题答案&#xff1a; 设计题答案示例 一、并发基础与优化核心知识点 线程 vs 异步任务 核心区别&#xff1a;std::thread直接管理线程&#xf…...

逼用户升级Win11,微软开始给Win10限速

随着Windows10的支持时间越来越短&#xff0c;微软也加大了对Win10用户的驱赶力度。 最近&#xff0c;微软官宣了将要在今年6月份降低OneNote for Windows 10的同步速度。软件也将和Windows10在今年的10月14日一同停止支持和维护。 这将影响实时协作和多设备访问。 对OneNote…...

HarmonyOs-ArkUI List组件

列表是一个复杂的容器&#xff0c;当列表项达到一定数量&#xff0c;使得列表内容超出其范围的时候&#xff0c;就会自动变为可以滚动。列表适合用来展现同类数据类型。 List组件支持使用&#xff0c;条件渲染&#xff0c;循环渲染&#xff0c;懒加载等渲染控制方式生成子组件…...

基于YOLOv8深度学习的PCB缺陷检测识别系统【python源码+GUI界面+数据集+训练代码+登录界面】

目录 一、界面全貌展示 二、前言摘要 三、GUI界面演示 &#xff08;一&#xff09;用户加载自定义模型 &#xff08;二&#xff09;单张图像检测 &#xff08;三&#xff09;检测图像文件夹 &#xff08;四&#xff09;检测视频 &#xff08;五&#xff09;摄像头检测 …...

鸿蒙生态圈暗战:数字孪生三强争霸谁将主宰消费电子未来?

IDC数据显示&#xff0c;2025年Q1华为以38.7%份额领跑中国折叠屏市场&#xff0c;Pura X首月销量突破120万台。这款搭载HarmonyOS 5的旗舰&#xff0c;通过灵犀通信技术实现5G A网络下载速率提升30%&#xff0c;并在离线环境下完成厘米级导航。其爆款逻辑背后&#xff0c;是鸿蒙…...

react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析

一、React 15&#xff08;2016&#xff09; 核心架构&#xff1a;Stack Reconciler&#xff08;栈协调器&#xff09; 工作原理&#xff1a; 同步递归渲染&#xff1a;采用深度优先遍历方式递归处理 Virtual DOM&#xff0c;形成不可中断的调用栈渲染流程&#xff1a;1. 触发 …...