Mybatis 里面的缓存机制

news2025/2/24 14:36:23

    Mybatis 里面设计的二级缓存是用来提升数据的检索效率,避免每次数据的访问都需要去查询数据库。

     一级缓存,是 SqlSession 级别的缓存,也叫本地缓存,因为每个用户在执行查询的时 候都需要使用 SqlSession 来执行, 为了避免每次都去查数据库,Mybatis 把查询出来的数据保存到 SqlSession 的本地缓 存中,后续的 SQL 如果命中缓存,就可以直接从本地缓存读取了。 

    如果想要实现跨 SqlSession 级别的缓存?那么一级缓存就无法实现了,因此在 Mybatis 里面引入了二级缓存,就是当多个用户在查询数据的时候,只要有任何一个 SqlSession 拿到了数据就会放入到二级缓存里面, 其他的 SqlSession 就可以从二级缓存加载数据。 

        每个 一级缓存的具体实现原理是: 在 SqlSession 里面持有一个 Executor,每个 Executor 中有一个 LocalCache 对象。 当用户发起查询的时候,Mybatis 会根据执行语句在 Local Cache 里面查询,如果没命中,再去查询数据库并写入到 LocalCache,否则直接返回。 所以,缓存的生命周期是 SqlSessiion,而且在多个 Sqlsession 或者分布式环境下, 可能会导致数据库写操作出现脏数据。 

        

    (如图)二级缓存的具体实现原理是: 使用 CachingExecutor 装饰了 Executor,所以在进入一级缓存的查询流程之前,会先通过 CachingExecutor 进行二级缓存的查询。 

        开启二级缓存以后,会被多个 SqlSession 共享,所以它是一个全局缓存。因此它的查询流程是先查二级缓存,再查一级缓存,最后再查数据库。 

        另外,MyBatis 的二级缓存相对于一级缓存来说,实现了 SqlSession 之间缓存数据 的共享,同时缓存粒度也能够到 namespace 级别,并且还可以通过 Cache 接口实现类不同的组合,对 Cache 的可控性也更强。 

        二级缓存的设计思想非常常见,比如 Nacos、Eureka 都用到了。

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

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

相关文章

案例分享:西河水库安全监测信息化系统实施方案

一、项目概述1.1项目背景西河水库信息化工作已开展多年,但是由于西河水库监测设备都已经老化或者损坏,现有设备已渐渐不能满足新时期西河水库信息化和现代化发展需求。因此,灌区管理局拟在运用现代信息和通信技术手段感测、分析、整合水库运行…

【Git】(六)子模块跟随主仓库切换分支

场景 主仓库:TestGit 子模块:SubModule 分支v1.0 .gitmodules文件 [submodule "Library/SubModule"]path Library/SubModuleurl gitgitee.com:sunriver2000/SubModule.gitbranch 1.0.0.0 分支v2.0 .gitmodules文件 [submodule "Li…

Mapbox-gl 关闭所有Popup,以及关闭按钮出现黑色边框bug

1.官方示例 var popup new mapboxgl.Popup().addTo(map);popup.remove(); 很明显,需要记录popup对象,管理起来比较麻烦。 2.本人采用div的方式关闭所有的popup,在map对象上新增加方法 map.closePopupmapView.popupClear function(){$(&q…

Idea中使用Statistic插件统计工程项目代码量

1. 功能背景 公司要对一个项目进行代码统计,这么多类,总不能让我一个一个数据,于是想到了Statistic插件。让我们一起看看Statistic插件怎么使用吧。 2. Statistic插件 首先需要知道Idea统计项目代码行数,主要是使用Statistic插…

概念解析 | 无线感知的新篇章:异构网络感知的原理与挑战

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:异构网络感知。 无线感知的新篇章:异构网络感知的原理与挑战 Interference Management in HetNets 在当今的无线通信领域,我们面临着一个重大的挑战:如何在有限的频谱资源…

【Redis】Redis 的学习教程(五)之 Redis 事务、持久化、集群

1. 事务 1.1 事务的概述 Redis 事务通过 MULTI 、EXEC、DISCARD、WATCH 几个命令来实现 MULTI:开启事务EXEC:提交事务DISCARD:放弃事务WATCH:为 Redis 事务提供 check-and-set (CAS)行为 Redis 事务可以…

创业新机会?全球将有36%的员工永久远程办公!

刚刚过去的2020年是极其不平凡的一年,这一年面对的困难,严重程度超出了所有人的预料,很多公司都遇到的困难就是无法按时复工,这对于创业公司而言,无异于生死大考。 为了活下去,很多公司都开启了远程办公的…

欧科云链研究院探析Facebook稳定币发行经历会不会在PayPal重演

引言 作者最近的报告-探析PayPal发行稳定币是否会重蹈Facebook覆辙-近期被英国的金融时报(中文版)刊登。由于该报告在欧科云链研究院内部反响较好,下面就带大家简单的剖析这篇报告的主要内容。 *这篇文章主要由对比分析(已删减&a…

【高阶数据结构】AVL树 {概念及实现;节点的定义;插入并调整平衡因子;旋转操作:左单旋,右单旋,左右双旋,右左双旋;AVL树的验证及性能分析}

AVL树 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明…

定位与轨迹-百度鹰眼轨迹开放平台-学习笔记

1. 百度鹰眼轨迹的主要功能接口 百度的鹰眼轨迹平台,根据使用场景不同,提供了web端、安卓端等各种类型的API与SDK,本文章以web端API为例,介绍鹰眼轨迹的使用。 2. API使用前的准备 使用鹰眼轨迹API,需要两把钥匙&…

真香!Jenkins 主从模式解决问题So Easy~

01、Jenkins 能干什么 Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 中文官网:https://jenkins.io/zh/ …

OpenCV(十一):图像仿射变换

目录 1.图像仿射变换介绍 仿射变换: 仿射变换矩阵: 仿射变换公式: 2.仿射变换函数 仿射变换函数:warpAffine() 图像旋转:getRotationMatrix2D() 计算仿射变换矩阵:getAffineTransform() 3.demo 1.…

并发(CAS ABA问题)07

CAS public class Hsss {public static void main(String[] args) {AtomicInteger atomicIntegernew AtomicInteger(201);//CAS compareAndSet 比较并交换//如果我期望的值达到了,那么就更新,否则,就不更新atomicInteger.compareAndSet(201,2…

Java版电子招投标管理系统源码-电子招投标认证服务平台-权威认证

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

TL6478(TI TMS320C6748 DPS)EVM开发板技术讲座 第一讲:串口终端ZOC软件的安装

串口终端ZOC软件的安装 1. 软件获得2. 安装软件3. 软件设置1. 软件获得 zoc602串口工具下载地址: https://download.csdn.net/download/Windgs_YF/88279060 2. 安装软件 1、将zoc602.zip文件解压,双击解压目录中的zoc602.exe安装文件,弹出如下安装界面: 2、点击 Next,…

Python+turtle实现一个图片播放器

我们可以利用Pythonturtle实现一个简易的图片播放器,我们先看一下效果图 完整版代码: [D:\照片\\ i for i in os.listdir(D:\照片)]:os.listdir(‘这里写上你图片的保存路径’) Screen().bgpic(pic_list[num]),加载图片至turtle的…

手敲视觉slam14讲 ch7 / pose_estimation_3d2d.cpp (1)

首先理清我们需要实现什么功能,怎么实现,提供一份整体逻辑:包括主函数和功能函数 主函数逻辑: 1. 读图,两张rgb(cv::imread) 2. 找到两张rgb图中的特征点匹配对 2.1定义所需要的参数:keypoints…

BOM对MES管理系统的影响与作用

在建设MES管理系统中,BOM(物料清单)具有至关重要的作用。它提供了产品的组成部分和结构信息,支持生产过程的监控、协调和管理。本文将详细探讨BOM在MES管理系统中的影响和作用。 一、生产过程指导 BOM为MES系统提供了产品的组成部…

MP中的字段还可以利用函数来查询拼接sql

//根据value查询GetMapping("getTest")public List<HashMap> getTest() {QueryWrapper<TTest> queryWrapper new QueryWrapper<>();queryWrapper.eq("substr(name,1,2)","99999");List<TTest> list1 testService.list…