【Redis】 事务和锁机制(图文结合,最详细)

news2024/11/19 6:34:32

目录

一、Redis 事务是什么

二、Redis 事务命令操作

三、Redis 事务中的命令错误处理

3.1、事务中出现命令语法错误

3.2、事务中出现命令逻辑错误

四、事务冲突的解决办法

4.1、事务冲突问题

4.1、方法一:悲观锁

4.2、方法二:乐观锁


一、Redis 事务是什么


Redis 事务是一个原子性的操作:事务中的所有命令都会序列化,按顺序执行,事务执行过程中不会被其他客户端的命令请求打断.

例如下图:

 Redis  事务主要就是用来串联多个命令,防止其他命令插队~

二、Redis 事务命令操作


主要以下三个命令:

Multi:输入此命令开始,之后输入的命令会一次进入命令队列中,但不会执行.

Exec:让 Redis 将之前命令队列中的命令依次执行.

discard:放弃组队(删除队列中的所有命令).

例如 组队 + 执行 ,如下:

例如 组队 + 放弃组队,如下:

  

Ps:作用类似 MySQL 中的创建事务,提交/回滚事务,但不完全一样:

  • MySQL 中开启事务后,会执行之后输入的所有命令,一旦出现错误,会将回滚到开启事务的时候.
  • Redis 的使用 multi 命令后,输入的所有命令都不会执行,而是放入一个队列当中,只有执行exec 时才依次执行所有的指令,一旦出现错误,也会出现两种不同的类型(后面会具体讲).

三、Redis 事务中的命令错误处理


3.1、事务中出现命令语法错误

当在事务中出现命令的语法错误,那么在 exec 执行所有组队命令的时候,则会放弃刚刚组队的所有命令任务

3.2、事务中出现命令逻辑错误

当在事务中出现命令的逻辑错误,那么在 exec 执行所有组队命令的时候,则会放弃刚刚逻辑错误的那一条命令,其他正确的命令正常执行。

四、事务冲突的解决办法


4.1、事务冲突问题

想象这样一个场景:在我的账户里有 1000 块钱,此时我的 朋友1 和 朋友2 要同时从我的账户中取 600 块钱,由于 朋友1 取钱的时候看到的是 1000 元,朋友2 取钱的时候看到的也是 1000 元,因此账户中同时扣款中最后就只剩 -200 元,但实际上我们不允许账户出现负数情况,此时就出现了事务冲突.

如何解决呢?接着往下看~

4.1、方法一:悲观锁

顾名思义,总是假设容易发生所冲突,因此在每次操作前都会进行一个加锁的操作.

例如刚刚 事务冲突问题 中所描述的栗子,悲观锁要做的就是在每个用户操作之前先进行加锁,其他用户要访问这个资源只能先阻塞等待.

适用场景:写操作多(需要加锁的场景多), 读操作少的场景。

4.2、方法二:乐观锁

顾名思义,总假设不容易发生所冲突,因此每次操作前都不会上锁,而是给当前资源加上版本号,操作完后,修改版本号,若有其他用户来进行写操作,会先对比版本号,若版本号不符合预期,则停止操作.

例如当有两个用户同时进行取款操作,先取到款的用户会修改版本号,当用户二取款时就会发现版本号不一样,就不能在执行之前的操作(发现不一致,直接停止操作).

 适用场景:适用于读操作多,写操作少的场景,可以提高吞吐量~

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

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

相关文章

【MyBatis】XML版快速入门——练习题

目录 1、准备工作 1.1、导入依赖(mybatis启动器和mysql驱动) 1.2.、yml中配置MyBatis的配置 3、编写domain、mapper、xml 2、数据库准备 2.1、类型表 2.2、老师表 2.3、班级表 2.4、城市表 2.5、学生表 2.6、课程表 2.7、中间表 3、练习题…

【P3】JMeter HTTP 接口设计

一、简答 HTTP 接口设计 HTTP请求默认值: 配置 http 请求的默认值,比如协议、主机、端口 HTTP信息头管理器: 配置 http 请求的头部参数 HTTP请求: 用于和业务交互 查看结果树: 用于结果展示 二、准备工作 慕慕生…

嵌入式基础测试手册——基于NXP iMX6ULL开发板(4)

前 言 本文档适用开发环境: Windows开发环境:Windows 7 64bit、Windows 10 64bit 虚拟机:VMware15.1.0 Linux开发环境:Ubuntu18.04.4 64bit U-Boot:U-Boot-2020.04 Kernel:Linux-5.4.70 Linux SDK:5.4.70_2.3.0 基于测试板卡:创龙科技TLIMX6U-EVM是一款基于NXP…

数字化供电所业务融合贯通建设方案(ppt可编辑)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 1、供电所现状分析 2、供电所数字化转型重点建设要素 三、建设原则 以“数字管理、提质增效”为重点,充分利用“云大物移智”技术,推动人员、设备、…

IDEA2022版教程下(快键键总结、Debug断点调试总结、22版本idea创建各种工程、关联数据库、常用插件)

8.快捷键的使用 8.1 常用快捷键 1 通用型(复制,黏贴,剪贴…) 说明快捷键复制代码-copyctrl c粘贴-pastectrl v剪切-cutctrl x撤销-undoctrl z反撤销-redoctrl shift z保存-save allctrl s全选-select allctrl a 2 提高…

【C++学习】文件操作

程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放。 通过文件可以将数据持久化。 C中对文件操作要包含头文件 <fstream> 文本类型分为两种&#xff1a; 1.文本文件 ---文件以文本的ASCII码形式存在计算机中 2.二进制文件---文件以文本…

低代码,一招制敌,解决职场人的的办公难题

“站在巨人的肩膀上让你事半功倍”&#xff0c;本文阐释如何使用低代码工具成倍提高生产力&#xff0c;不管是个人还是企业&#xff0c;值得一看&#xff0c;都将受益。 作为一个卑微的打工人&#xff0c;以下任何一个场景都会让我头皮发麻&#xff1a; 领导要你30分钟内汇总…

Excel高频 (IF,Countif,Sum,rank,max,min) 函数使用教程

工作中经常会用到IF判断&#xff0c;COUNTIF按条件统计个数&#xff0c;SUM求和&#xff0c;RANK排名次&#xff0c;MAX求最大,MIN求最小&#xff0c;AVERAGE求平均等函数&#xff0c;读书屋办公教程网将通过这篇文章采用图文结合的形式详细讲解Excel这几个函数的用法。 一、 判…

2023 年 3 月青少年机器人技术等级考试理论综合试卷(二级)

2023 年 3 月青少年机器人技术等级考试理论综合试卷&#xff08;二级&#xff09; 一、单选题(共 30 题&#xff0c;共 60 分) 1.关于后轮驱动车说法正确的是&#xff1f;&#xff08; &#xff09; A. 发动机放在车的后部 B.起步加速比前轮驱动车更好 C.传动效率比前轮驱动车高…

iview-admin首页的图表数据渲染问题

iview-admin的首页有几个图表&#xff0c;应该是作者自己封装的&#xff0c;有个问题是在mounted时&#xff0c;从后台获取数据&#xff0c;应该把图表根据数据重新渲染一下。 <chart-bar id"myChart" style"height: 260px;" :value"barData"…

操作系统基本原理

目录 第二章、操作系统基本原理1、操作系统概述2、进程管理2.1、进程的状态2.2、前趋图2.3、进程的同步与互斥2.4、PV操作2.5、PV操作题目2.6、PV操作与前驱图2.7、死锁问题2.8、死锁的预防与避免&#xff08;银行家算法&#xff09; 3、存储管理3.1、分区存储组织3.2、页式存储…

vue如何将图片转换为webp并前端展示

1. 首先把图片转换为webp格式 1.1 可以进入cmd后&#xff0c;pip安装pillow pip install Pillow --trusted-host mirrors.cloud.tencent.com1.2 save为webp格式&#xff0c;即可得到webp格式图片 ... from PIL import Image img Image.open(background1.jpeg).convert(RGB…

干货分享|一款让企业知识管理变得简单高效的工具软件

互联网发展到下半场&#xff0c;很多企业都开始进行数字化转型&#xff0c;在这个过程中&#xff0c;很多企业都忽视了极为重要的一点——企业的知识管理。如今信息化的时代&#xff0c;可以说企业的知识管理是引领企业数字化转型、进行创新的关键。 企业知识管理的实质就是对…

后端Springboot框架搭建APi接口开发(第三章末)

前两章节讲述了如何通过APi接口实现对数据库的查询操作 这章主要讲述&#xff0c;Stringboot对数据库数据的查询、新增、修改、删除操作 第一节&#xff1a;数据库查询 首先编写UserMapper.xml。定义SQl语句 文件结构&#xff1a;demo\src\main\java\com\example\demo\mapp…

蓝牙耳机什么牌子的好用?测评员分享目前最值得入手的蓝牙耳机

蓝牙耳机的出现让我们日常生活更加便利&#xff0c;与有线耳机相比少了束缚&#xff0c;而随着蓝牙耳机市场的成熟&#xff0c;涌现了超多品牌&#xff0c;让大家不知道蓝牙耳机什么牌子的好用&#xff0c;我这几年已经测评过50多款蓝牙耳机&#xff0c;今天将要分享目前最值得…

【类和对象】(上)

系列文章目录 文章目录 系列文章目录&#x1f451; 前言&#x1f451; 一、什么是类&#xff0c;什么是对象&#x1f451; 二、类的引入&#x1f451; 三、类的定义&#x1f451;三、1.类的两种定义方式&#xff1a; &#x1f451; 四、类的内存计算&#x1f451;五、this指针&…

Flutter学习之旅 - 页面布局Padding、Column、Flex、Expanded

文章目录 Padding线性布局组件(Column和Row)水平布局组件(Row)垂直布局组件(Column) 弹性布局(Flex&Expanded)ExpandedFlex 达到父元素的尺寸 Padding class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);overrideWidget build(…

ATA-2000系列高压放大器介绍

ATA-2000系列是一款理想的可放大交、直流信号的高压放大器。最大差分输出1600Vp-p(800Vp)高压&#xff0c;可以驱动高压型负载。电压增益数控可调&#xff0c;一键保存常用设置&#xff0c;为您提供了方便简洁的操作选择&#xff0c;同时双通道高压放大器输出还可同步调节&…

FastJson序列化导致的 “$ref“

前言&#xff1a; 刚转后端没多久&#xff0c;在通过RPC调用其他组的服务的时候&#xff0c;其他组对接的同学说&#xff0c;你的入参是有问题的&#xff0c;然后他把入参发我&#xff0c;类似于下面的 json&#xff1a; {"addressMO": {"roomNumber": &…

795. 前缀和(C++和Python3)——2023.5.5打卡

文章目录 QuestionIdeasCode Question 输入一个长度为 n 的整数序列。 接下来再输入 m 个询问&#xff0c;每个询问输入一对 l,r 。 对于每个询问&#xff0c;输出原序列中从第 l 个数到第 r 个数的和。 输入格式 第一行包含两个整数 n 和 m 。 第二行包含 n 个整数&#…