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

发布时间:2024年01月17日

??

?

🍎个人博客:个人主页

🏆个人专栏:Mybatis??

????功不唐捐,玉汝于成


?


目录

前言

正文

一级缓存(Local Cache):

范围:

生命周期:

默认开启:

二级缓存(Global Cache):

范围:

生命周期:

需要配置:

结语

?我的其他博客


前言

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

正文

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

一级缓存(Local Cache):

  1. 范围:

    1. 一级缓存是基于 SqlSession 的,也就是说在同一个 SqlSession 内部有效。每次通过 SqlSession 执行查询,查询的结果会被缓存到这个 SqlSession 的缓存中。

  2. 生命周期:

    1. 缓存的生命周期很短,当 SqlSession 关闭时,缓存失效。如果在同一个 SqlSession 中执行相同的查询,MyBatis 会直接从一级缓存中获取结果,而不需要再次向数据库发送查询。

  3. 默认开启:

    1. 一级缓存在 MyBatis 中是默认开启的,因此在大多数情况下,开发者无需额外配置即可享受一级缓存的好处。

二级缓存(Global Cache):

  1. 范围:

    1. ??????? 二级缓存的范围是跨多个 SqlSession,也就是在同一个应用的多个 SqlSession 之间共享缓存。

  2. 生命周期:

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

  3. 需要配置:

    1. 二级缓存需要手动配置开启,配置文件中使用 <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 缓存的工作原理,开发者能够更好地优化数据库访问,提升系统的性能和响应速度,为用户提供更为流畅的应用体验。

?我的其他博客

【MySQL】数据库规范化的三大法则 — 一探范式设计原则-CSDN博客

【JAVA】线程的run()和start()有什么区别?-CSDN博客

【日常聊聊】程序员必备的面试技巧:如何在面试战场上脱颖而出-CSDN博客

【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁-CSDN博客

【JAVA】怎么确保一个集合不能被修改-CSDN博客

【Web开发】会话管理与无 Cookie 环境下的实现策略-CSDN博客

【Mybatis】Mybatis如何防止sql注入-CSDN博客

【软件工程】航行敏捷之路:深度解析Scrum框架的精髓-CSDN博客

【Spring】理解IoC与AOP:构建灵活而模块化的软件架构-CSDN博客

文章来源:https://blog.csdn.net/AliceNo/article/details/135625177
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。