高级java每日一道面试题-2024年9月19日-框架篇[Mybatis篇]-说一下mybatis的一级缓存和二级缓存?

如果有遗漏,评论区告诉我进行补充

面试官: 说一下mybatis的一级缓存和二级缓存?

我回答:

在MyBatis中,缓存机制是一个重要的特性,它可以帮助减少数据库的访问次数,从而提高应用的性能。MyBatis提供了两级缓存:一级缓存(也称为Session级缓存)和二级缓存(也称为跨Session缓存或映射器级别的缓存)。下面将详细解释这两种缓存机制。

一级缓存(Session级缓存)

概述
  • 一级缓存是默认开启的,它是基于SqlSession级别的缓存。
  • 每个SqlSession对象都有自己的缓存空间,这个缓存是私有的,不同SqlSession之间的缓存互不影响。
工作原理
  • 当一个查询被执行时,MyBatis首先会检查一级缓存中是否存在该查询的结果。
  • 如果存在,则直接返回缓存中的结果,避免了对数据库的重复访问。
  • 如果不存在,则执行查询并将结果存入一级缓存中,供后续相同查询使用。
缓存失效情况
  • 当执行SQL语句进行增删改操作(INSERT、UPDATE、DELETE)时,MyBatis会清空当前SqlSession的一级缓存,因为增删改操作可能会影响到缓存中数据的一致性。
  • 当执行不同的SqlSession时,每个SqlSession都有自己独立的一级缓存,它们之间互不影响。
  • 手动调用SqlSession的clearCache()方法也会清空一级缓存。
缓存实现
  • MyBatis的一级缓存通常使用PerpetualCache(一种简单的基于HashMap的缓存)实现,但也可以配置为使用其他缓存实现,如FIFOCache(先进先出缓存)或LRUCache(最近最少使用缓存)等。
优点
  • 提高了查询性能,减少了数据库访问次数。
  • 实现简单,默认开启,无需额外配置。
缺点
  • 只在同一个SqlSession内有效,跨SqlSession无法共享缓存。
  • 更新操作会导致整个缓存被清空,可能会导致缓存命中率降低。

二级缓存(跨Session缓存/全局缓存)

概述
  • 二级缓存是基于namespace级别的缓存,可以被多个SqlSession共享。二级缓存是跨SqlSession的,它的作用域是Mapper(映射器)的命名空间。这意味着,同一个Mapper映射的多个SqlSession之间可以共享缓存数据。
  • 二级缓存是可选的,需要显式地开启,并且要确保序列化支持。
工作原理
  • 当一个查询被执行时,MyBatis首先会检查二级缓存中是否存在该查询的结果。
  • 如果存在,则直接返回缓存中的结果。
  • 如果不存在,则执行查询并将结果存入二级缓存中,供后续相同查询使用。
配置步骤
  1. 开启二级缓存

    • mybatis-config.xml文件中设置<setting name="cacheEnabled" value="true"/>
    • 在映射文件(如Mapper.xml)中添加<cache/>标签来启用二级缓存。
  2. 序列化支持

    • 确保实体类实现了Serializable接口,以便于对象可以被序列化并存储在缓存中。
  3. 控制缓存行为

    • 可以通过<cache>标签的属性来控制缓存的行为,例如设置缓存过期时间、读写策略,eviction(回收策略)、flushInterval(刷新间隔)、size(引用数目)等。
    • 也可以通过<select><insert><update><delete>标签上的useCacheflushCache属性来控制特定语句是否使用缓存以及是否刷新缓存。
缓存失效情况
  • 与一级缓存类似,执行增删改操作也会使二级缓存失效。
  • 当SqlSession关闭或提交时,MyBatis会尝试将二级缓存中的数据写回到数据库(这取决于配置的flushCache属性),并清空当前SqlSession中的一级缓存。
  • 不同的Mapper之间,如果开启了二级缓存,它们之间也可以共享缓存数据,但前提是这些Mapper的缓存配置要兼容。
  • 调用了clearCache()方法手动清空缓存。
  • 根据配置的缓存策略,如过期时间到达时,缓存会被自动清空。
注意事项
  • 二级缓存中的数据是跨SqlSession的,因此必须保证缓存数据的序列化(因为缓存数据可能存储在磁盘或其他介质上)。
  • 二级缓存可能会引起脏读等问题,因为缓存的数据可能不是最新的(尽管有刷新机制,但依然存在风险)。
优点
  • 可以在多个SqlSession之间共享缓存,提高了整体应用的性能。
  • 提供了更多的配置选项,可以根据需求灵活调整缓存行为。
缺点
  • 需要显式配置,增加了开发复杂度。
  • 更新操作会导致整个namespace下的缓存被清空,可能会影响缓存命中率。
  • 对象必须实现Serializable接口,增加了序列化的开销。

总结

  • 一级缓存是默认开启的,基于SqlSession级别的缓存,适用于单个SqlSession内的多次查询。
  • 二级缓存是基于namespace级别的缓存,需要显式开启,可以在多个SqlSession之间共享,适用于跨SqlSession的查询。

在面试中,能够清晰地解释MyBatis的一级缓存和二级缓存的工作原理、配置方式以及各自的优缺点,将有助于展示你对MyBatis框架的理解和技术深度。此外,实际项目经验也是面试官非常看重的部分,因此准备好相关的项目案例来说明你的实践经历也是非常有帮助的。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

关闭小广告【JavaScript】

在 JavaScript 中实现关闭小广告的功能&#xff0c;可以通过监听点击事件来隐藏广告元素。 实现效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport&q…

IP地址免费SSL证书建议使用吗?

IP地址免费SSL证书的现状 市场情况&#xff1a;目前市面上并没有免费的IP地址SSL证书。即使有少数机构提供所谓的“免费”证书&#xff0c;也可能存在功能限制、有效期短、技术支持不足等问题。 提供机构&#xff1a;尽管没有完全的免费选项&#xff0c;但可以选择一些可信赖的…

基于51单片机的简易8层电梯模拟proteus仿真

地址&#xff1a;https://pan.baidu.com/s/1z4SBpi2yb8Qeu-85jqkuZQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

实用为主,需求为王!通风天窗专业厂家谈谈通风天窗怎么选?

通风天窗作为现代建筑的重要组成部分&#xff0c;不仅能够有效改善室内空气质量&#xff0c;还能增强建筑的自然采光与美观性。市场上通风天窗种类繁多&#xff0c;品质参差不齐&#xff0c;如何选购一款既满足功能需求又性价比高的产品&#xff0c;成为业主关注的焦点。成都昱…

图为科技大模型一体机,智领未来社区服务

当AI与边缘计算相遇&#xff0c;一幅关于智慧生活的宏伟蓝图正缓缓展开。 今天&#xff0c;让我们一同探索&#xff0c;如何通过图为大模型一体机&#xff0c;为物业服务插上智能的翅膀。 通过整合采集物业数据&#xff0c;大模型一体机可全方位为物业行业赋能&#xff0c;实…

【SpringBoot详细教程】-02-SpringBoot配置【持续更新】

Hello&#xff01;彦祖们&#xff0c;从今天开始我将更新一波超详细的SpringBoot的图文教程&#xff0c;感兴趣的老铁给个关注点赞 支持一下呗&#xff0c;最好再评论一个666&#xff0c;O(∩_∩)O哈哈~&#xff08;贪心了&#xff09; 点个关注吧 02. SpringBoot配置 Sprin…

图像放大效果示例【JavaScript】

实现效果&#xff1a; 当鼠标悬停在小图&#xff08;缩略图&#xff09;上时&#xff0c;大图&#xff08;预览图&#xff09;会随之更新为相应的小图&#xff0c;并高亮当前悬浮的小图的父元素。 代码&#xff1a; 1. HTML部分 <!DOCTYPE html> <html lang"z…

[Excel VBA]如何使用VBA自动生成图表

在Excel中&#xff0c;图表是可视化数据的重要工具。以下是一个VBA代码示例&#xff0c;帮助你自动生成图表。 1. 代码说明 该代码会根据指定数据范围创建一个柱状图&#xff0c;并设置图表的基本属性。 2. VBA代码 Sub CreateChart()Dim ws As WorksheetDim chartObj As Ch…

转行要趁早!网络安全岗人才稀缺,前景广阔,零基础入门到精通,收藏这篇就够了

1 网络安全从业人员能力基本要求&#xff0c;您达标了吗&#xff1f; 引导 根据国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告&#xff08;2023年第1号&#xff09;&#xff0c;由全国信息安全标准化技术委员会归口的《信息安全技术 网络安全从业…

考题抄错会做也白搭——模板方法模式

文章目录 考题抄错会做也白搭——模板方法模式选择题不会做&#xff0c;蒙呗&#xff01;重复易错难改提炼代码模板方法模式模板方法模式的特点 考题抄错会做也白搭——模板方法模式 选择题不会做&#xff0c;蒙呗&#xff01; 时间&#xff1a;3月27日19点  地点&#xff…

【C++】智能指针模拟实现及详解

目录 什么是智能指针&#xff1a; 为什么要有智能指针&#xff1a; auto_ptr: unique_ptr&#xff1a; shared_ptr&#xff1a; shared_ptr的缺陷&#xff1a; weak_ptr: 什么是智能指针&#xff1a; 概念&#xff1a; 智能指针是一种特殊的类模板&#xff0c;用于自动…

【计算机网络 - 基础问题】每日 3 题(十九)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

java怎么给代码增加说明,让鼠标浮上去可以显示说明

java怎么给代码增加说明&#xff0c;让鼠标浮上去可以显示说明 简述 通过使用JavaDoc注释&#xff0c;你可以提高代码的可读性和可维护性&#xff0c;并且方便其他开发者理解你的代码。在Java中&#xff0c;为了让鼠标悬停在代码上时显示说明信息&#xff0c;你可以使用JavaDo…

​数据库: MyBatis-Plus

MyBatis-Plus MyBatis-Plus 是 MyBatis 的增强工具&#xff0c;核心作用是简化 CRUD 操作和提升开发效率。它提供基础的增删改查方法、分页插件、条件构造器以及代码生成器&#xff0c;帮助减少重复代码量。MyBatis-Plus 不支持自动建表&#xff0c;专注于简化数据库操作&…

CV之OCR:GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略

CV之OCR&#xff1a;GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略 目录 GOT-OCR2.0的简介 1、更新 GOT-OCR2.0的安装和使用方法 1、安装 安装环境cuda11.8torch2.0.1 安装包 安装Flash-Attention GOT权重&#xff1a;1.43G 2、演示 3、训练 4、评估 GOT-…

直接在tomcat下面访问jsp

复制一份tomcat为tomcat-8.5.99test 记住修改tomcat-8.5.99test下面bin/startup.sh&#xff08;Linux/Mac&#xff09;或 bin/startup.bat&#xff08;Windows&#xff09; 在 Linux/Mac export CATALINA_BASE/path/to/tomcat1 $CATALINA_HOME/bin/startup.sh 在 Windows: …

springboot 控制器

springboot 控制器 文章目录 springboot 控制器1.Controller和RestController**Controller&#xff1a;数据和页面****RestController&#xff1a;数据**所以我们的controller一般在springmvc中使用&#xff0c;返回页面&#xff0c;但是现在的项目基本上都是前后端分离项目&am…

手写SpringMVC

1、开发HspDispatcherServlet 2、完成客户端/浏览器可以请求控制层 目的&#xff1a;发出url请求时&#xff0c;经过前端控制器&#xff0c;找到Monster的List方法&#xff0c;把结果再打回去 3、从web.xml动态获取hspspringmvc.xml 4、完成自定义Service注解功能 目的&…

什么是 SaaS?(软件即服务)

什么是SaaS软件&#xff1f; 软件即服务&#xff08;SaaS&#xff09;是一种云计算方法&#xff0c;其中应用程序在线存储&#xff0c;并以订阅的方式提供给用户。SaaS解决方案可以从任何web浏览器中使用&#xff0c;而无需在pc端或服务器上安装软件。 SaaS消除了基础设施、升…

Microsoft Edge 五个好用的插件

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏 插件_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 Microsoft Edge 一.安装游览器 ​编辑 二.找到插件商店 1.打开游览器后&#xff0c;点击右上角的设置&#…