我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mybatis缓存机制(一级缓存、二级缓存、三级缓存)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mybatis缓存机制(一级缓存、二级缓存、三级缓存)

一、含义:

缓存就是内存中的数据,常常来自对数据库查询结果的保存。
使用缓存,我们可以避免频繁与数据库进行交互,从而提高响应速度。

Mybatis的缓存分为一级缓存、二级缓存、三级缓存。

一级缓存:
作用域是同一个 SqlSession,在同一个 sqlSession 中两次执行相同的 sql 语句,
第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取,从而提高查询效率。当一个 sqlSession 结束后该 sqlSession 中的 一级缓存也就不存在了。Mybatis 默认开启一级缓存。
一级缓存内部存储使用一个 HashMap,key 为 hashCode+sqlId+Sql 语句。value 为 从查询出来映射生成的 java 对象 sqlSession 执行 insert、update、delete 等操作 commit 提交后会清空缓存区域。

二级缓存:
是多个 SqlSession 共享的,其作用域是 mapper 的同一个 namespace,不同 的 sqlSession 两次执行相同 namespace 下的 sql 语句且向 sql 中传递参数也相同即最终执行 相同的 sql 语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从 缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis 默认没有开启二级缓存 需要在 setting 全局参数中配置开启二级缓存。
开启二级缓存:
1.在yml中添加以下代码
在这里插入图片描述
2.然后在对应的mapper.xml里面加入配置
在这里插入图片描述
在这里插入图片描述注意:开启二级缓存后,对应的pojo一定要实现Serializable,否则在序列化的时候会报错
readOnly:是否只读 。 值为true时,mybatis认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。mybatis为了加快获取速度,直接会将数据在缓存中的引用交给用户,不安全,但速度快。
值为false时,mybatis觉得获取的数据可能会被修改,mybatis会利用序列化&反序列化的技术克隆一份新的数据给你,安全,但速度慢。

三级缓存:
Mybatis 的一级缓存与二级缓存 只适用于单体项目,在分布式服务或者微服务架构下 都会出现数据不一致问题。所以Mybatis 为我们提供了自定义缓存 我们可以集成很多三方中间件来做缓存 这里就那Redis来说一下。
在这里插入图片描述

二、区别

一级缓存的作用域是一个sqlsession内;二级缓存作用域是针对mapper进行缓存;
2.一级缓存是默认开启的;二级缓存需要手动配置
3.Mybatis 的一级缓存与二级缓存 只适用于单体项目,在分布式服务或者微服务架构下 都会出现数据不一致问题。三级缓存就是为了解决这个问题

三、小结

一级缓存的作用域是一个sqlsession内;二级缓存作用域是针对mapper进行缓存;
2.一级缓存是默认开启的;二级缓存需要手动配置
3.一级缓存sqlSession 执行 insert、update、delete 等操作 commit 提交后会清空缓存区域。sqlSession.close()后一级缓存也没有了。但是销毁sqlSession后会将里面的缓存存到二级缓存中;
4.二级缓存cache中readonly属性如果为false 那么相应的pojo类必须实现Serializable接口 并且其缓存查询到的对象都是通过序列化或者反序列化克隆的,所以对象之间两两不相等
5.二级缓存的生命周期和应用同步,它是用来解决一级缓存不能跨会话共享数据的问题,范围是namespace级别的,可以被多个会话共享(只要是同一个接口的相同方法,都可以进行共享)。
6.只要没有显式地设置cacheEnabled为false,都会使用CachingExector装饰基本的执行器(SIMPLE、REUSE、BATCH)。 二级缓存总是默认开启的,但是每个Mapper的二级开关是默认关闭的。
7.二级缓存进行增删改操作也会刷新二级缓存,导致二级缓存失效

附,二级缓存的执行流程:
在这里插入图片描述

来源地址:https://blog.csdn.net/weixin_45161172/article/details/129526131

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mybatis缓存机制(一级缓存、二级缓存、三级缓存)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mybatis一级缓存和二级缓存是什么

mybatis一级缓存和二级缓存是mybatis提供的两种不同层次的缓存机制,一级缓存是mybatis中默认开启的缓存机制,它是基于线程的本地缓存,二级缓存是基于namespace级别的缓存,可以被多个SqlSession对象共享。本教程操
2023-08-09

JavaMybatis一级缓存和二级缓存

缓存是内存当中一块存储数据的区域,目的是提高查询效率,降低服务器和数据库的压力,这篇文章主要介绍了Mybatis一级缓存和二级缓存,感兴趣的同学可以参考阅读本文
2023-05-14

一文搞懂MyBatis一级缓存和二级缓存

本文主要介绍了一文搞懂MyBatis一级缓存和二级缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-19

Spring中一级缓存、二级缓存和三级缓存有什么作用

今天小编给大家分享一下Spring中一级缓存、二级缓存和三级缓存有什么作用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。缓存
2023-06-29

Java Mybatis一级缓存和二级缓存是什么

本篇内容主要讲解“Java Mybatis一级缓存和二级缓存是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Mybatis一级缓存和二级缓存是什么”吧!一、什么是缓存
2023-07-05

MyBatis中一级缓存与二级缓存的区别

今天就跟大家聊聊有关MyBatis中一级缓存与二级缓存的区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一级缓存一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sq
2023-05-31

Mybatis中一级缓存、二级缓存的示例分析

这篇文章主要介绍了Mybatis中一级缓存、二级缓存的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解
2023-06-02

mybatis一级缓存和二级缓存有什么区别

MyBatis的一级缓存和二级缓存是两种不同级别的缓存机制。一级缓存是在同一个SqlSession内部的缓存,它默认是开启的。在执行查询操作时,查询的结果会被缓存到一级缓存中,下次执行相同的查询操作时,会直接从缓存中获取结果,而不需要再次查
2023-08-20

MyBatis 延迟加载、一级缓存、二级缓存(详解)

使用ORM框架我们更多的是使用其查询功能,那么查询海量数据则又离不开性能,那么这篇中我们就看下mybatis高级应用之延迟加载、一级缓存、二级缓存。使用时需要注意延迟加载必须使用resultMap,resultType不具有延迟加载功能。一
2023-05-31

深入浅析MyBatis中的一级缓存与二级缓存

本篇文章给大家分享的是有关深入浅析MyBatis中的一级缓存与二级缓存,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。MyBatis缓存我们知道,频繁的数据库操作是非常耗费性能的
2023-05-31

MyBatis中二级缓存和一级缓存有什么区别

MyBatis中的一级缓存是SqlSession级别的缓存,即在同一个SqlSession中执行相同的查询,第一次查询结果会被缓存下来,后续再执行相同的查询时,直接从缓存中获取结果,提高查询效率。但是一级缓存的生命周期比较短,当SqlSes
MyBatis中二级缓存和一级缓存有什么区别
2024-03-07

使用MyBatis如何实现一级缓存与二级缓存

这期内容当中小编将会给大家带来有关使用MyBatis如何实现一级缓存与二级缓存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MyBatis缓存我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB
2023-05-31

MyBatis一级缓存与二级缓存原理与作用分析

mybatis-plus是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生,这篇文章带你了解Mybatis的一级和二级缓存
2022-12-27

MyBatis一级缓存与二级缓存原理与作用是什么

这篇“MyBatis一级缓存与二级缓存原理与作用是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MyBatis一级缓存与
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录