Mybatis-plus缓存机制

简介: MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,提供了更便捷的CRUD操作和其他功能。与MyBatis相比,MyBatis-Plus并没有引入自己的缓存机制,而是直接使用了MyBatis的缓存机制。在MyBatis中,缓存分为一级缓存和二级缓存。1. 一级缓存:一级缓存是SqlSession级别的缓存,它默认是开启的。当查询操作执行时,查询的结果会被缓存在SqlSession的内部数据结构中。如果后续再次执行相同的查询,MyBatis会先检查一级缓存中是否存在结果,如果存在则直接返回缓存的结果,而不会再次执行SQL语句。一级缓存的生命周期与SqlSession相同,

Mybatis-plus缓存机制

一,介绍

MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,提供了更便捷的CRUD操作和其他功能。与MyBatis相比,MyBatis-Plus并没有引入自己的缓存机制,而是直接使用了MyBatis的缓存机制。

在MyBatis中,缓存分为一级缓存和二级缓存。

  1. 一级缓存:一级缓存是SqlSession级别的缓存,它默认是开启的。当查询操作执行时,查询的结果会被缓存在SqlSession的内部数据结构中。如果后续再次执行相同的查询,MyBatis会先检查一级缓存中是否存在结果,如果存在则直接返回缓存的结果,而不会再次执行SQL语句。一级缓存的生命周期与SqlSession相同,当SqlSession关闭时,一级缓存也会被清空。
  2. 二级缓存:二级缓存是Mapper级别的缓存,它可以被多个SqlSession共享。当一个查询执行完毕后,查询的结果会被缓存到二级缓存中。当后续其他SqlSession执行相同的查询时,MyBatis会先检查二级缓存中是否存在结果,如果存在则直接返回缓存的结果,而不会再次执行SQL语句。二级缓存的生命周期与应用程序的整个生命周期相同,当应用程序关闭时,二级缓存才会被清空。

需要注意的是,二级缓存默认是关闭的,需要在MyBatis的配置文件中进行配置才能启用。同时,为了保证数据的一致性,MyBatis对于更新操作(如插入、更新、删除)会自动清空相关的二级缓存。

总结起来,MyBatis-Plus并没有引入自己的缓存机制,而是直接使用了MyBatis的一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,而二级缓存是Mapper级别的缓存。开发者可以根据具体的需求来选择是否启用和配置二级缓存。

二,一级缓存

MyBatis-Plus并没有引入自己的一级缓存机制,而是直接使用了MyBatis的一级缓存。一级缓存是MyBatis中默认开启的,它是基于SqlSession级别的缓存,用于缓存查询操作的结果。

在MyBatis中,一级缓存的实现方式如下:

  1. SqlSession级别的缓存:每个SqlSession对象都有一个独立的一级缓存。当执行查询操作时,查询的结果会被缓存到当前SqlSession对象的一级缓存中。
  2. 缓存结构:一级缓存使用一个HashMap来存储查询结果。HashMap的键是查询的SQL语句和参数的组合,值是查询的结果对象。
  3. 缓存命中:当执行查询操作时,MyBatis会先检查当前SqlSession对象的一级缓存中是否存在相同的查询(相同的SQL语句和参数),如果存在则直接返回缓存的结果,而不会再次执行SQL语句。
  4. 缓存失效:一级缓存的生命周期与SqlSession对象相同。当SqlSession对象执行更新操作(如插入、更新、删除)时,会自动清空一级缓存,以保证数据的一致性。

需要注意的是,一级缓存是基于SqlSession对象的,不同的SqlSession对象之间的缓存是相互独立的。如果多个SqlSession对象同时操作同一份数据,它们之间的一级缓存是不共享的,可能会导致数据不一致的情况。

对于一级缓存的控制,MyBatis提供了以下几种方式:

  1. 默认开启:一级缓存在MyBatis中是默认开启的,无需额外配置。
  2. 手动清空:可以通过调用SqlSession的

clearCache()方法手动清空一级缓存。

  1. 配置禁用:可以在MyBatis的配置文件中通过设置

localCacheScope属性来禁用一级缓存。将localCacheScope设置为STATEMENT即可禁用一级缓存,每次查询都会强制刷新缓存。

总结起来,MyBatis-Plus并没有引入自己的一级缓存机制,而是直接使用了MyBatis的一级缓存。一级缓存是基于SqlSession级别的缓存,通过HashMap存储查询结果,可以提高查询性能。一级缓存是默认开启的,开发者可以通过手动清空或配置禁用的方式进行控制。

三,二级缓存

MyBatis-Plus并没有引入自己的二级缓存机制,而是直接使用了MyBatis的二级缓存。二级缓存是Mapper级别的缓存,用于缓存查询操作的结果。

在MyBatis中,二级缓存的实现方式如下:

  1. 配置启用:为了启用二级缓存,需要在MyBatis的配置文件中进行相应的配置。在

标签中添加标签,并设置type属性为合适的缓存实现类,如org.apache.ibatis.cache.impl.PerpetualCache。

  1. 缓存结构:二级缓存使用一个HashMap来存储查询结果。HashMap的键是查询的SQL语句和参数的组合,值是查询的结果对象。
  2. 缓存命中:当执行查询操作时,MyBatis会先检查二级缓存中是否存在相同的查询(相同的SQL语句和参数),如果存在则直接返回缓存的结果,而不会再次执行SQL语句。
  3. 缓存失效:二级缓存的生命周期与应用程序的整个生命周期相同。当执行更新操作(如插入、更新、删除)时,MyBatis会自动清空相关的二级缓存,以保证数据的一致性。

需要注意的是,二级缓存默认是关闭的,需要在MyBatis的配置文件中进行配置才能启用。

对于二级缓存的控制,MyBatis提供了以下几种方式:

  1. 默认配置:可以使用MyBatis的默认配置来启用二级缓存。在MyBatis的配置文件中,设置

即可启用二级缓存。

  1. 显式配置:可以在Mapper接口或XML文件中使用

标签来显式配置二级缓存。在标签中可以设置缓存的实现类、缓存的大小、缓存的过期时间等属性。

  1. 注解配置:可以使用

@CacheNamespace注解在Mapper接口上配置二级缓存。通过注解的方式可以灵活地控制缓存的行为。

总结起来,MyBatis-Plus并没有引入自己的二级缓存机制,而是直接使用了MyBatis的二级缓存。二级缓存是Mapper级别的缓存,可以提高查询性能。二级缓存默认是关闭的,需要在MyBatis的配置文件中进行配置才能启用,并可以通过默认配置、显式配置或注解配置的方式进行控制。

四,一级缓存和二级缓存的差异和关系

一级缓存和二级缓存是MyBatis中两种不同级别的缓存机制,它们有一些差异和关系。

  1. 级别差异:
  • 一级缓存(SqlSession级别):一级缓存是默认开启的,它是基于SqlSession对象的缓存,用于缓存单个SqlSession中的查询结果。
  • 二级缓存(Mapper级别):二级缓存是可选的,需要手动进行配置启用,它是基于Mapper接口的缓存,用于缓存多个SqlSession之间的查询结果。
  1. 范围差异:
  • 一级缓存:一级缓存的作用范围是在同一个SqlSession中。当执行查询操作时,查询的结果会被缓存在当前SqlSession对象中,其他相同的查询可以直接从缓存中获取结果。
  • 二级缓存:二级缓存的作用范围是在多个SqlSession之间共享。当执行查询操作时,查询的结果会被缓存在一个共享的缓存区域中,其他SqlSession可以直接从缓存中获取结果。
  1. 生命周期差异:
  • 一级缓存:一级缓存的生命周期与SqlSession对象相同。当SqlSession对象执行更新操作(如插入、更新、删除)时,会自动清空一级缓存,以保证数据的一致性。
  • 二级缓存:二级缓存的生命周期与应用程序的整个生命周期相同。当执行更新操作时,MyBatis会自动清空相关的二级缓存,以保证数据的一致性。
  1. 关系:
  • 二级缓存是建立在一级缓存之上的。当一个SqlSession执行查询操作时,如果命中了一级缓存,则直接返回缓存的结果;如果没有命中一级缓存,则会去二级缓存中查找结果。如果二级缓存中存在相同的查询结果,则返回缓存的结果;如果二级缓存中不存在结果,则执行数据库查询,并将结果放入一级缓存和二级缓存中。

需要注意的是,一级缓存和二级缓存是独立的,它们的数据存储结构和缓存命中策略也不同。一级缓存是基于SqlSession对象的,缓存的数据只在当前SqlSession中有效;而二级缓存是基于Mapper接口的,缓存的数据在多个SqlSession之间共享。

在使用MyBatis时,可以根据具体的需求和场景选择是否启用二级缓存,以及合理使用一级缓存和二级缓存,以提高查询性能和减少数据库访问。

五,总结

Mybatis-plus并没有引入自己的缓存机制,而是直接使用了MyBatis的一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,二级缓存是Mapper级别的缓存。一级缓存是默认开启的,通过HashMap存储查询结果,可以提高查询性能。二级缓存默认是关闭的,需要在MyBatis的配置文件中进行配置才能启用。二级缓存是基于Mapper接口的,缓存的数据在多个SqlSession之间共享。一级缓存和二级缓存是独立的,它们的数据存储结构和缓存命中策略也不同。在使用MyBatis时,可以根据具体的需求和场景选择是否启用二级缓存,以及合理使用一级缓存和二级缓存,以提高查询性能和减少数据库访问。

目录
相关文章
|
6月前
|
存储 缓存 NoSQL
mybatisplus一二级缓存
MyBatis-Plus 继承并优化了 MyBatis 的一级与二级缓存机制。一级缓存默认开启,作用于 SqlSession,适用于单次会话内的重复查询;二级缓存需手动开启,跨 SqlSession 共享,适合提升多用户并发性能。支持集成 Redis 等外部存储,增强缓存能力。
|
9月前
|
缓存 并行计算 PyTorch
PyTorch CUDA内存管理优化:深度理解GPU资源分配与缓存机制
本文深入探讨了PyTorch中GPU内存管理的核心机制,特别是CUDA缓存分配器的作用与优化策略。文章分析了常见的“CUDA out of memory”问题及其成因,并通过实际案例(如Llama 1B模型训练)展示了内存分配模式。PyTorch的缓存分配器通过内存池化、延迟释放和碎片化优化等技术,显著提升了内存使用效率,减少了系统调用开销。此外,文章还介绍了高级优化方法,包括混合精度训练、梯度检查点技术及自定义内存分配器配置。这些策略有助于开发者在有限硬件资源下实现更高性能的深度学习模型训练与推理。
1851 0
|
8月前
|
缓存 Java 数据库连接
Mybatis一级缓存详解
Mybatis一级缓存为开发者提供跨数据库操作的一致性保证,有效减轻数据库负担,提高系统性能。在使用过程中,需要结合实际业务场景选择性地启用一级缓存,以充分发挥其优势。同时,开发者需注意其局限性,并做好事务和并发控制,以确保系统的稳定性和数据的一致性。
302 20
|
10月前
|
缓存 Java 数据库连接
Mybatis一级缓存、二级缓存详讲
本文介绍了MyBatis中的查询缓存机制,包括一级缓存和二级缓存。一级缓存基于同一个SqlSession对象,重复查询相同数据时可直接从缓存中获取,减少数据库访问。执行`commit`操作会清空SqlSession缓存。二级缓存作用于同一namespace下的Mapper对象,支持数据共享,需手动开启并实现序列化接口。二级缓存通过将数据存储到硬盘文件中实现持久化,为优化性能,通常在关闭Session时批量写入缓存。文章还说明了缓存的使用场景及注意事项。
381 7
Mybatis一级缓存、二级缓存详讲
|
11月前
|
缓存 Java 数据库连接
十、MyBatis的缓存
十、MyBatis的缓存
235 6
|
11月前
|
存储 缓存 分布式计算
【赵渝强老师】Spark RDD的缓存机制
Spark RDD通过`persist`或`cache`方法可将计算结果缓存,但并非立即生效,而是在触发action时才缓存到内存中供重用。`cache`方法实际调用了`persist(StorageLevel.MEMORY_ONLY)`。RDD缓存可能因内存不足被删除,建议结合检查点机制保证容错。示例中,读取大文件并多次调用`count`,使用缓存后执行效率显著提升,最后一次计算仅耗时98ms。
337 0
【赵渝强老师】Spark RDD的缓存机制
|
10月前
|
SQL Java 数据库连接
MyBatis 实现分页的机制
MyBatis 的分页机制主要依赖于 `RowBounds` 对象和分页插件。`RowBounds` 实现内存分页,适合小数据量场景,通过设定偏移量和限制条数对结果集进行筛选。而针对大数据量,则推荐使用分页插件(如 PageHelper),实现物理分页。插件通过拦截 SQL 执行,动态修改语句添加分页逻辑,支持多种数据库方言。配置插件后,无需手动调整查询方法即可完成分页操作,提升性能与灵活性。
248 0
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
249 6
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
505 4