当前位置: 首页 > news >正文

MyBatis一级和二级缓存介绍

MyBatis是一个持久层框架,它提供了一级缓存和二级缓存来提高数据库操作的性能。下面是一级缓存和二级缓存的区别理解、画图和知识点总结:

一级缓存:

  • 一级缓存是MyBatis默认开启的缓存层,它是SqlSession级别的缓存,也就是说同一个SqlSession中的多次查询会使用同一个缓存。
  • 一级缓存是在内存中实现的,它的生命周期与SqlSession相同。
  • 当SqlSession执行查询时,查询的结果会被保存在一级缓存中,下次再执行相同的查询语句时,会直接从缓存中取结果,而不需要再次访问数据库。
  • 一级缓存的失效条件包括:SqlSession关闭、手动清除缓存、增删改操作等。
  • 一级缓存的范围是SqlSession级别的,不同的SqlSession之间无法共享缓存。

二级缓存:

  • 二级缓存是MyBatis中的全局缓存,它是mapper级别的缓存,多个SqlSession可以共享同一个二级缓存。
  • 二级缓存是在SqlSessionFactory的级别实现的,它的生命周期与应用程序的生命周期相同。
  • 当SqlSession执行查询时,查询的结果会被保存在二级缓存中,下次再执行相同的查询语句时,会直接从缓存中取结果,而不需要再次访问数据库。
  • 二级缓存的失效条件包括:SqlSessionFactory刷新、手动清除缓存、增删改操作等。
  • 二级缓存的范围是mapper级别的,同一个namespace下的mapper可以共享二级缓存,不同的namespace之间无法共享缓存。
  • 使用二级缓存需要在Mapper的配置文件中配置<cache>标签。

总结:

  • 一级缓存是SqlSession级别的缓存,二级缓存是mapper级别的缓存。
  • 一级缓存的生命周期是与SqlSession相同,二级缓存的生命周期是与应用程序相同。
  • 一级缓存的范围是SqlSession级别的,二级缓存的范围是mapper级别的。
  • 一级缓存的作用范围是在同一个SqlSession中,二级缓存的作用范围是在多个SqlSession中。
  • 一级缓存是默认开启的,而使用二级缓存需要在Mapper的配置文件中进行配置。

以下是一级缓存和二级缓存的简单示意图:

+------------+                  +----------------+
| SqlSession | ---------------->|       DB       |
|            |                  |                |
+----^-------+                  +------+---------+|                                   ||                                   ||                                   ||         +-----------------+       |+-------> |   一级缓存      | <-----++-----------------+

+-----------------------+           +----------------+
|   SqlSessionFactory   |           |       DB       |
|                       |           |                |
+----^--------------+---+           +------+---------+|                                     ||                                     ||                                     ||        +-----------------+          |+------> |   二级缓存      | <--------++-----------------+

http://www.lryc.cn/news/366741.html

相关文章:

  • PowerDesigner遍历导出所有表结构到Excel
  • JavaSE——抽象类和接口
  • 生成式人工智能 - stable diffusion web-ui安装教程
  • 11-Linux文件系统与日志分析
  • mac M1下安装PySide2
  • 超详解——识别None——小白篇
  • C++的MQTT开发:使用Paho的C++接口实现消息发布、订阅、连接RabbitMQ
  • 深度网络学习笔记(二)——Transformer架构详解(包括多头自注意力机制)
  • Python 快速查找并替换Excel中的数据
  • KafkaStream Local Store和Global Store区别和用法
  • PowerDesigner导入Excel模板生成数据表
  • STM32 HAL库开发——入门篇(3):OLED、LCD
  • 在Linux中查找文件命令的几种方法
  • 【TB作品】MSP430F5529 单片机,温度控制系统,DS18B20,使用MSP430实现的智能温度控制系统
  • 立创小tips
  • Html/HTML5常用标签的学习
  • Tomcat 配置:一文掌握所有要点
  • git 大文件上传失败 Please remove the file from history and try again.
  • 骑砍2霸主MOD开发(14)-进击的巨人
  • Android 可拖拽的View,限制在父布局中随意拖拽;拖拽结束后可左右吸边;
  • 逐步更新动画混合参数(Blend)使其平滑地过渡到目标值
  • 【多模态/CV】图像数据增强数据分析和处理
  • 代码随想录——修建二叉搜素树(Leetcode669)
  • EasyExcel导出多个sheet封装
  • 【Python错误】:AttributeError: ‘generator‘ object has no attribute ‘next‘解决办法
  • 如何配置Feign以实现服务调试
  • pc之间的相互通信详解
  • Mongodb中字段的删除
  • TP8 PHP 动态变量调用 (new $class())->$action($data)
  • 理解JVM内存模型与Java内存模型(JMM)