0

0

说一下 mybatis 的一级缓存和二级缓存?

幻夢星雲

幻夢星雲

发布时间:2025-11-28 16:25:19

|

742人浏览过

|

来源于php中文网

原创

一级缓存失效包括SqlSession关闭、执行更新操作、手动清空缓存或查询条件变化;二级缓存需在全局配置中启用cacheEnabled,在Mapper中添加标签,并确保POJO实现Serializable接口。

说一下 mybatis 的一级缓存和二级缓存?

MyBatis的一级缓存是Session级别的,而二级缓存是namespace级别的。一级缓存默认开启,无需配置;二级缓存需要手动开启和配置。

MyBatis的缓存机制,是为了提高查询效率,减少数据库压力。一级缓存的存在,让同一个Session内,相同的查询语句可以直接从缓存中获取结果,避免重复查询数据库。而二级缓存,则允许跨Session共享缓存数据,进一步提升性能。

一级缓存失效的几种情况?

一级缓存是和SqlSession绑定的,它的生命周期与SqlSession一致。所以,SqlSession关闭时,一级缓存也就失效了。但除了SqlSession的生命周期,还有一些操作会导致一级缓存失效:

  • 执行任何更新操作(update、insert、delete):因为更新操作会修改数据库中的数据,为了保证数据的一致性,MyBatis会清空一级缓存。
  • 手动清空缓存:可以通过调用sqlSession.clearCache()方法手动清空一级缓存。
  • 不同的SqlSession:即使查询条件完全相同,不同的SqlSession也会创建自己的一级缓存,彼此之间互不影响。
  • 相同的SqlSession,但查询条件不同:虽然在同一个SqlSession中,但如果两次查询的查询条件不同,MyBatis会执行两次查询,并分别将结果缓存起来。

总之,一级缓存失效的核心原则是:任何可能导致数据不一致的操作,都会导致一级缓存失效。

二级缓存如何配置才能生效?

要让MyBatis的二级缓存生效,需要在多个地方进行配置。

  1. 开启二级缓存:在MyBatis的全局配置文件(通常是mybatis-config.xml)中,需要开启二级缓存。

    
      
        
      
      ...
    
  2. 在Mapper文件中配置cache元素:在需要使用二级缓存的Mapper文件中,添加元素。可以自定义缓存的配置,例如缓存的刷新间隔、缓存的大小等。

    
      
      ...
    
    • eviction:缓存回收策略,常见的有LRU(最近最少使用)、FIFO(先进先出)等。
    • flushInterval:缓存刷新间隔,单位是毫秒。如果设置为0,则表示不刷新。
    • size:缓存的大小,表示最多可以存储多少个对象。
    • readOnly:是否只读。如果设置为true,则表示缓存中的对象是只读的,不能被修改。
  3. POJO类需要实现Serializable接口:因为二级缓存可能会将对象序列化到磁盘上,所以需要确保POJO类实现了java.io.Serializable接口。

    95Shop仿醉品商城
    95Shop仿醉品商城

    95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we

    下载
  4. select语句需要配置useCache="true":默认情况下,select语句会使用二级缓存。如果不需要使用二级缓存,可以将useCache属性设置为false

  5. 更新操作需要配置flushCache="true":默认情况下,update、insert、delete语句会清空二级缓存。如果不需要清空二级缓存,可以将flushCache属性设置为false。但是,通常不建议这样做,因为可能会导致数据不一致。

配置完成后,MyBatis就会自动使用二级缓存来提高查询效率。

如何选择使用一级缓存还是二级缓存?

选择使用哪种缓存,或者同时使用两种缓存,取决于具体的应用场景和需求。

  • 一级缓存适用场景:适用于单个会话内需要频繁查询相同数据的场景。由于一级缓存的生命周期与SqlSession一致,因此在同一个会话内,可以避免重复查询数据库。
  • 二级缓存适用场景:适用于多个会话之间需要共享缓存数据的场景。例如,对于一些不经常变动的配置信息、字典数据等,可以使用二级缓存来提高查询效率。

一般来说,建议同时使用一级缓存和二级缓存。一级缓存可以提高单个会话内的查询效率,而二级缓存可以提高多个会话之间的查询效率。但是,需要注意的是,二级缓存可能会导致数据一致性问题,因此需要谨慎使用。

例如,一个电商网站的商品信息,可以考虑使用二级缓存。因为商品信息不经常变动,而且多个用户可能会查询相同的商品信息。但是,对于库存信息,则不适合使用二级缓存,因为库存信息是经常变动的,使用二级缓存可能会导致超卖等问题。

总而言之,选择使用哪种缓存,需要根据具体的应用场景和需求进行权衡。没有绝对的正确答案,只有最适合的解决方案。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

832

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

738

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

734

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16925

2023.08.03

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MongoDB 教程
MongoDB 教程

共17课时 | 2万人学习

XML教程
XML教程

共142课时 | 5.6万人学习

php-src源码分析探索
php-src源码分析探索

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号