【Mybatis】说一下 mybatis 的一级缓存和二级缓存

简介: 【Mybatis】说一下 mybatis 的一级缓存和二级缓存

e0df3d53483943cd9ac55e037777a795.jpg

前言

在数据库访问中,性能优化一直是开发者关注的焦点之一。MyBatis 作为一种流行的持久层框架,提供了一级缓存和二级缓存两种缓存机制,以帮助开发者提高数据库查询效率。本文将深入探讨 MyBatis 中的一级缓存和二级缓存的原理、使用方式以及适用场景,帮助开发者更好地理解和应用缓存机制。

正文

MyBatis 中提供了一级缓存(Local Cache)和二级缓存(Global Cache)两种缓存机制,用于提高数据库查询性能。

一级缓存(Local Cache):

  1. 范围:
  1. 一级缓存是基于 SqlSession 的,也就是说在同一个 SqlSession 内部有效。每次通过 SqlSession 执行查询,查询的结果会被缓存到这个 SqlSession 的缓存中。
  1. 生命周期:
  1. 缓存的生命周期很短,当 SqlSession 关闭时,缓存失效。如果在同一个 SqlSession 中执行相同的查询,MyBatis 会直接从一级缓存中获取结果,而不需要再次向数据库发送查询。
  1. 默认开启:
  1. 一级缓存在 MyBatis 中是默认开启的,因此在大多数情况下,开发者无需额外配置即可享受一级缓存的好处。


二级缓存(Global Cache):

  1. 范围:
  1. 二级缓存的范围是跨多个 SqlSession,也就是在同一个应用的多个 SqlSession 之间共享缓存。
  1. 生命周期:
  1. 缓存的生命周期较长,可以在多个 SqlSession 之间共享。当某个 SqlSession 执行了一个更新操作(增、删、改),或者进行了提交(commit)操作时,二级缓存会失效,需要重新加载。

3.需要配置:

  • 二级缓存需要手动配置开启,配置文件中使用 <cache> 元素进行配置,并在需要使用二级缓存的映射文件中添加 <cache-ref> 元素引用全局的缓存。
<!-- MyBatis 配置文件 -->
<configuration>
    <!-- 开启二级缓存 -->
    <setting name="cacheEnabled" value="true"/>
    <!-- 使用二级缓存 -->
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
</configuration>
 
<!-- 映射文件 -->
<mapper namespace="com.example.mapper.UserMapper">
    <!-- 引用全局的缓存 -->
    <cache-ref namespace="com.example.mapper.UserMapper"/>
    <!-- 具体的 SQL 映射配置 -->
</mapper>

一级缓存和二级缓存在不同的应用场景中有各自的优劣,合理的使用缓存机制可以有效提升系统性能。需要根据具体的业务需求和数据访问模式来决定是否使用缓存,以及使用何种缓存。

结语

缓存机制在数据库访问中扮演了至关重要的角色,MyBatis 的一级缓存和二级缓存为我们提供了灵活且可控的缓存解决方案。一级缓存适用于同一个 SqlSession 内的数据共享,能够有效减少重复查询,而二级缓存则在多个 SqlSession 之间共享数据,提高了系统整体的性能。在使用缓存时,我们需要根据业务需求和数据特性来选择合适的缓存机制,合理配置缓存的生命周期和失效机制。通过深入理解 MyBatis 缓存的工作原理,开发者能够更好地优化数据库访问,提升系统的性能和响应速度,为用户提供更为流畅的应用体验。

相关文章
|
21天前
|
存储 缓存 芯片
让星星⭐月亮告诉你,当我们在说CPU一级缓存二级缓存三级缓存的时候,我们到底在说什么?
本文介绍了CPU缓存的基本概念和作用,以及不同级别的缓存(L1、L2、L3)的特点和工作原理。CPU缓存是CPU内部的存储器,用于存储RAM中的数据和指令副本,以提高数据访问速度,减少CPU与RAM之间的速度差异。L1缓存位于处理器内部,速度最快;L2缓存容量更大,但速度稍慢;L3缓存容量最大,由所有CPU内核共享。文章还对比了DRAM和SRAM两种内存类型,解释了它们在计算机系统中的应用。
57 1
|
2月前
|
缓存 Java 数据库连接
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
文章介绍了MyBatis的缓存机制,包括一级缓存和二级缓存的配置和使用,以及如何整合第三方缓存EHCache。详细解释了一级缓存的生命周期、二级缓存的开启条件和配置属性,以及如何通过ehcache.xml配置文件和logback.xml日志配置文件来实现EHCache的整合。
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
|
1天前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
14 5
|
16天前
|
缓存 Java 数据库连接
使用MyBatis缓存的简单案例
MyBatis 是一种流行的持久层框架,支持自定义 SQL 执行、映射及复杂查询。本文介绍了如何在 Spring Boot 项目中集成 MyBatis 并实现一级和二级缓存,以提高查询性能,减少数据库访问。通过具体的电商系统案例,详细讲解了项目搭建、缓存配置、实体类创建、Mapper 编写、Service 层实现及缓存测试等步骤。
|
5月前
|
SQL 缓存 Java
MYBATIS缓存
MYBATIS缓存
|
4月前
|
SQL 缓存 Java
【面试官】Mybatis缓存有什么问题吗?
面试官:你说下对MyBatis的理解?面试官:那SqlSession知道吧?面试官:Mybatis的缓存有哪几种?面试官:那Mybatis缓存有什么问题吗?面试官:Mybatis分页插件是怎么
【面试官】Mybatis缓存有什么问题吗?
|
4月前
|
缓存 算法 Java
关于MyBatis的缓存详解
MyBatis 的缓存机制非常灵活,可以通过简单的配置来满足不同的性能需求。合理地使用缓存可以显著提高应用程序的性能,尤其是在处理大量数据库查询时。然而,开发者需要注意缓存的一致性和并发问题,特别是在使用可读写缓存时。
|
3月前
|
存储 缓存 Java
|
5月前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
74 2
|
5月前
|
SQL 缓存 Java
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件