mybatis二级缓存

news2025/2/2 10:57:12

MyBatis
缓存可以极大的提升查询效率。
MyBatis系统中默认定义两级缓存(一级缓存和二级缓存)。
一、两级缓存
1、一级缓存:(本地缓存):sqlSession级别的缓存。一级缓存是一直开启的;sqlSession级别的一个Map。
  与数据库同一次会话期间查询到的数据会放在本地缓存中
  以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库;
  在这里插入图片描述
一级缓存失效情况(没有使用到当前一级缓存的情况,效果就是,还需要再向数据库发出查询):
  1、sqlSession不同。
  在这里插入图片描述
2、sqlSession相同,查询条件不同。(当前一级缓存中还没有这个数据)
在这里插入图片描述
3、sqlSession相同,两次查询之间执行了增删改操作(这次增删改可能对当前数据有影响)
在这里插入图片描述
4、sqlSession相同,手动清除了一级缓存(缓存清空)
在这里插入图片描述
2、二级缓存:(全局缓存):基于namespace级别的缓存:一个namespace对应一个二级缓存:
  工作机制:
  1、一个会话,查询一条数据,这个数据就会被放在当前会话的一级缓存中;
  2、如果会话关闭;一级缓存中的数据会被保存到二级缓存中;新的会话查询信息,就可以参照二级缓存中的内容。
  3、sqlSession=EmployeeMapper=>Employee
          DepartmentMapper===>Department
    不同的namespace查出的数据会放在自己对应的缓存中(Map)
    效果:数据会从二级缓存中获取
      查出的数据都会被默认先放在一级缓存中。
      只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓存中。
  使用步骤:
  1)、开启全局二级缓存配置:mybatis默认开启二级缓存,还是要在配置文件中显式的开启
在配置文件mybatis-config.xml的setting将其开启

//显式的指定每个我们需要更改的配置的值,即使他是默认的。防止版本更新带来的问题


  2)、去mapper.xml中配置使用二级缓存: 在哪个mapper文件中使用cache标签,那个mapper中有二级缓存
在mapper标签中写标签。

<!--
    eviction:缓存的回收策略:
        LRU==最近最少使用:移除最长时间不被使用的对象。
        FIFO==先进先出:按对象进入缓存的顺序来移除它们。
        SOFT==软引用:移除基于垃圾回收器状态和软引用规则的对象。
        WEAK==弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
        默认是LRU。
    flushInterval:缓存刷新间隔
        缓存多长时间清空一次,默认是不清空,设置一个毫秒值
    readOnly:是否只读;
        true:只读;mybatis认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。
                    mybatis为了加快获取速度,直接就会将数据在缓存中的引用交给用户。不安全,速度快。
        false:非只读;mybatis觉得获取的数据可能会被修改。
                    mybatis会利用序列化&反序列化的技术克隆一份新的数据给你。安全,速度慢。默认为false。
    size:缓存存放多少元素;
    type:指定自定义缓存的全类名;
            实现Cache接口即可;
-->

<cache></cache>

3)、我们的POJO需要实现序列化接口
两个不同的sqlSession,开启二级缓存之后。第一次会话关闭之后,第二次查询时直接在二级缓存中取。

3、缓存有关的设置以及属性
和缓存有关的设置/属性:
  1)、cacheEnabled=true:
           =false:关闭缓存(关闭二级缓存)(一级缓存一直可用)
  2)、每个select标签都有useCache=“true”:
              =false:不使用缓存(一级缓存依然可以使用,二级缓存不使用)
  3)、每个增删改标签:flushCache=“true”:增删改执行完成后就会清除缓存(一级二级都会清除)
        测试:flushCache=“true”:一级缓存就清空了;二级缓存也会被清空。
      在select标签中默认flushCache=false:不清缓存,如果改为true,每次查完就会清缓存。
  4)、sqlSession.clearCache():只是清除当前sqlSession的一级缓存;   
  5)、在全局配置文件的settings标签中localCacheScope:本地缓存作用域:(一级缓存SESSION);当前会话的所有数据保存在会话缓存中;
        STATEMENT:可以禁用一级缓存;
4、缓存原理图示

Cache接口:

mybatis的缓存就是一个小Map
在这里插入图片描述


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka学习---4、消费者(分区消费、分区平衡策略、offset、漏消费和重复消费)

1、消费者 1.1 Kafka消费方式 1、pull&#xff08;拉&#xff09;模式&#xff1a;consumer采用从broker中主动拉取数据。 2、push&#xff08;推&#xff09;模式&#xff1a;Kafka没有采用这种方式。因为broker决定消息发生速率&#xff0c;很难适应所有消费者的消费速率。…

Hive的概念

Hive 概述 Hive是一个基于Hadoop的数据仓库系统&#xff0c;它提供了类似与SQL的查询语言HiveQL,可以将结构化数据存储在Hadoop分布式文件系统中&#xff0c;并通过MapReduce进行过处理。 Hive的目标是使数据分析师和其他人员能够使用SQL语言来查询大规模的数据集&#xff0…

Triton教程 --- Triton架构

Triton教程 —Triton架构 文章目录 Triton教程 ---Triton架构并发模型执行模型和调度器无状态模型状态模型控制输入隐式状态管理状态初始化调度策略直接的Oldest 合奏模型 下图显示了 Triton 推理服务器的高级架构。 模型存储库是一个基于文件系统的模型存储库&#xff0c;Trit…

链表--part8--环形链表(leetcode 142)

文章目录 基本思路leetcode 142 环形链表 基本思路 此题为重点题目 此题实际上可以分为俩题&#xff1a; 1 判断是否存在环 2 如果存在返回环的入口 如果不存在返回null 那我就对于这俩种情况进行相关的解释。 判断是否有环 有点类似追及问题&#xff0c;我们可以定义一个快指…

全面理解Starrocks3.0

文章目录 什么是Starrocks适用场景系统架构产品特性 什么是Starrocks StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理&#xff0c;就可以用 StarRocks 来支…

Python3数据分析与挖掘建模(16)特征降维与特征衍生

1. 特征降维&#xff08;PCA&#xff09; 回顾知识点&#xff1a; 特征降维是指将高维特征空间的数据映射到低维空间的过程&#xff0c;以减少特征的数量并保留数据的主要信息。下面是特征降维的一般步骤&#xff1a; &#xff08;1&#xff09;求特征协方差矩阵&#xff1a…

I2C协议

i2c硬件电路 i2c总线连接图&#xff1a; 注&#xff1a; i2c的SDA和SCL都需要上拉电阻&#xff0c;改变上拉电阻大小可调节I2C总线的上拉强度&#xff0c;上拉电阻用1k~100k不等&#xff0c;小了驱动能力就强&#xff0c;但电流就大了。不同内核版本上的驱动不一样&#xff…

C语言之指针详解(3)

目录 本章重点 1. 字符指针 2. 数组指针 3. 指针数组 4. 数组传参和指针传参 5. 函数指针 6. 函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 9. 指针和数组面试题的解析、 4. 数组参数、指针参数 我们来看一维数组传参 #include<stdio.h> void test(in…

Rust语言从入门到入坑——(2)Rust在windows上搭建开发环境

文章目录 0 引入1、搭建 Visual Studio Code 开发环境1.1、安装 Rust 编译工具1.2 、VS Code安装 2、官网在线3、总结4、引用 0 引入 开始搭建一个适合在windows上运行的Rust环境。 Rust支持的程序语言很多&#xff1a;可详见官网介绍 1、搭建 Visual Studio Code 开发环境 …

Systrace分析知识点

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、抓取Systrace二、CPU模块知识点三、input 点击事件处理流程四、Vsync 事件处理五、Android 绘制一帧流程分析六、Camx Trace TAG开启方法七、参考文…

管理类联考——英语——趣味篇——刷题需要实现什么目的?

刷题需要实现什么目的&#xff1f;  第一&#xff1a;在真题中巩固考研英语基础 在掌握一定的词汇量和句子分析能力后&#xff0c;开始一字不漏、逐字逐句的完成历年真题的超精读。抄写真题中生词&#xff0c;继续夯实词汇、分析长难句翻译&#xff0c;弄清楚题目中正确选项为…

Science: 功能饮料里面的这种添加剂会使动物寿命更长——这对人类意味着什么尚不清楚...

一项研究表明&#xff0c;当喂食大量牛磺酸&#xff08;一种常见的健康补充剂和能量饮料成分&#xff0c;最早从牛黄中分离出来&#xff09;时&#xff0c;老年小鼠、线虫和猴子可以活得更长或更健康。研究人员证明&#xff0c;这种天然氨基酸的水平与动物的衰老有关&#xff0…

STM32之外设DMA

DMA(Direct Memory Access)—直接存储器存取&#xff0c;是单片机的一个外设&#xff0c;它的主要功能是用来搬数据&#xff0c;但是不需要占用 CPU&#xff0c;即在传输数据的时候&#xff0c;CPU 可以干其他的事情&#xff0c;好像是多线程一样。数据传输支持从外设到存储器或…

Triton教程 -- 模型仓库

Triton教程 – 模型仓库 文章目录 Triton教程 -- 模型仓库存储库布局模型存储库位置本地文件系统 具有环境变量的云存储谷歌云存储S3Azure 存储带凭证文件的云存储&#xff08;测试版&#xff09; 模型版本模型文件TensorRT 模型ONNX 模型TorchScript 模型TensorFlow 模型OpenV…

滴滴实时数据链路建设组件选型实践篇

写在前面 随着滴滴内部技术栈的不断统一&#xff0c;实时相关技术组件资源的不断整合&#xff0c;各业务线实时数据相关开发经验的不断沉淀&#xff0c;基本形成了一套面向公司不同业务场景需求的最佳技术选型和具体落地方案。但同时我们也发现&#xff0c;大部分实时开发同学在…

React基础教程(一):React简介

React基础教程(一)&#xff1a;React简介 1、React是什么&#xff1f; 发生请求获取数据处理数据&#xff08;过滤&#xff0c;整理格式等&#xff09;操作DOM呈现页面 2、谁开发的 由Facebook的软件工程师 Jordan Walke创建于2011年部署于Facebook的newsfeed随后在2012年部…

一本书让你彻底搞懂安卓系统性能优化

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Transformer详解,中文版架构图

2.2.1 “编码器-解码器”架构 Seq2Seq 思想就是将网络的输入输出分别看作不同的序列&#xff0c;然后实现序列到序列 的映射&#xff0c;其经典实现结构就是“编码器-解码器”框架。编码器-解码器框架如图 2.7 所 示。 图2.7 编码器-解码器的基本框架 在 Seq2Seq 思想应用于自然…

机器鸟实现摆动尾巴功能

1. 功能说明 本文示例将实现R329样机机器鸟摆动尾巴的功能。 2. 电子硬件 在这个示例中&#xff0c;我们采用了以下硬件&#xff0c;请大家参考&#xff1a; 主控板 Basra主控板&#xff08;兼容Arduino Uno&#xff09;‍ 扩展板 Bigfish2.1扩展板‍ 电池7.4V锂电池 电路连接…

新的挑战:WebGL

这段时间一直在死磕 Chromium 的 8K 高清视频播放&#xff0c;虽然之前写过一些关键技术的实现&#xff0c;主要难点差不多攻破&#xff0c;但投入到产品中&#xff0c;依然还要解决很多实际中的问题&#xff0c;比如卡顿、格式支持、音视频不同步等等。前期的相关文章&#xf…