Redis - 深入理解Redis事务

目录

  • Redis是如何实现事务的?
  • 事务中执行的命令出现错误,会回滚事务吗?
  • 同一个连接可以重复开启事务吗?
  • 多个客户端同时开启事务会怎样?
  • 使用Redis事务只用MULTI和EXEC吗?
  • Redis中的WATCH机制是怎么实现的?
Redis是如何实现事务的?

解读
事务要满足ACID四个原则。了解Redis实现事务的机制,就能了解Redis是如何分别保证ACID的。同时,了解了事务实现机制,也能清楚知道Redis事务有何优劣,在使用时如何避免Redis事务缺点。

参考

  • Redis事务

概要

  1. Redis通过四个命令实现事务: WATCH, MULTI, EXEC, DISCARD
  2. Redis事务以MULTI命令开始,EXEC/DISCARD命令结束。EXEC用于提交事务,DISCARD用于取消事务。
  3. 在开启事务时,Redis操作命令并不会立即执行,而是会先进入事务队列。Redis事务队列是一个FIFO队列
  4. 当执行EXEC命令时,会把事务队列中的命令逐个执行,不会被任何命令中断。
事务中执行的命令出现错误,会回滚事务吗?

解读
通常,一个事务中会有不止一个Redis操作,任何一个操作都有失败的可能。在有操作出错的情况下,会影响事务的执行吗?

参考

  • Redis事务

概要

  1. 首先,Redis事务时不支持回滚的。也就是说,如果事务中的命令执行出错,已经执行的命令不会撤回,后续的命令也会继续执行。
  2. Redis事务的命令分为入队和执行两个阶段。在入队(进入事务队列)时出错,Redis会忽略入队出错的命令,不会影响后续命令入队。执行时出错,出错命令会被Redis忽略,其他没有出错的命令均会执行。
同一个连接可以重复开启事务吗?

解读
本质问题是是否允许事务嵌套。

参考

  • Redis设计与实现-事务
  • 剖析!Redis事务实现原理

概要

  1. Redis事务不能嵌套。如果再收到MULTI命令开启事务,会返回错误(redis-cli会返回(error) ERR MULTI calls can not be nested这样的错误)
  2. 遇到嵌套事务返回错误后,并不会影响事务队列继续接收命令,也不会修改事务队列中的任何数据。
多个客户端同时开启事务会怎样?

解读
在并发情况,很容易出现多个客户端同时开启事务的情况。这时Redis会区分客户端维护事务队列吗?另外,实际工程中为了提升性能,通常会用Redis连接池复用连接,这种情况下,会出现连接复用导致事务嵌套吗?

参考

  • Redis设计与实现-事务
  • 剖析!Redis事务实现原理
  • Sping Data Redis 使用事务时,不关闭连接的问题

概要

  1. Redis事务队列是与连接绑定的,不同的连接中允许同时开启事务,不会相互影响
  2. 合理的事务管理器中,会在开启事务时绑定连接,防止连接被其他请求复用。不过应用不当,会出现连接不能被归还的问题。(由此可见,一个优秀的事务管理器是多么重要)
使用Redis事务只用MULTIEXEC吗?

解读
使用Redis事务,不能单纯只用MULTIEXEC,因为某些key在事务执行时已经变了。正确的Redis事务需要保证事务执行时,事务涉及的数据没有被修改。

参考

  • Redis设计与实现-事务

概要

  1. 在开启事务前,使用WATCH命令监视指定的key,形成乐观锁
  2. 事务执行时,如果被WATCH的key发生了变化,则事务失效,不能执行。
Redis中的WATCH机制是怎么实现的?

解读
无他,只是为了了解底层实现原理

参考

  • Redis事务
  • Redis设计与实现-事务

概要

  1. 每个被WATCH的key都会维护一个WATCH这个key的所有client列表
  2. 当被WATCH的key发生修改时(执行任意修改命令),所有WATCH该key的client的REDIS_DIRTY_CAS字段会被修改为打开状态。
  3. 当执行事务时,如果这个client的REDIS_DIRTY_CAS字段被打开,说明有至少一个数据被修改,事务不能执行。

参考
Redis官方文档-Transactions

最后编辑于:2024-09-18 20:51:05


喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

在 Stable Diffusion 1.5 中 Lora, Dreambooth, Textual Inversion的详解指北

Lora, Dreambooth and Textual Inversion 说明 您是否想象过您可爱的宠物与埃菲尔铁塔合影的画面,或者想象过如何生成一张带有您朋友面孔的人工智能图像? 是的,通过稳定扩散技术的微调,这完全是可能的! 创建这些场景…

设备稳定流畅视频体验,乐鑫ESP32-S3芯片方案无线音视频传输通信

在快节奏的现代生活中,家庭安全和便利性成为了人们日益关注的话题。随着物联网技术的发展,智能家居安全系统正逐渐成为守护家庭的新选择。 家居安全如门锁和警报器,这些产品通过先进的传感器、摄像头和智能分析技术,不仅能够实时…

vulnhub-prime1

目录 靶场环境解题过程 靶场环境 项目ip靶机(prime)未知攻击机(kali)10.128.129.128 解题过程 打开靶机,我们只能看见一个登录界面,上面只有半截提示 我们首先要做的是主机发现,因为是网络适…

Flag_AGtivity_clear_top网页编程指南如何退出多activity程序

activity的启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT。 1. 如果已经启动了四个Activity:A,B,C和D。在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在start…

安卓好软-----跳过app应用开屏广告的小工具 无需root权限

工具特点; 软件很小。而且权限不多。无需root权限。测试效果还是不错的 应用利用了安卓系统的辅助功能API,可以读取您手机屏幕上显示的所有内容,并且可以以您的名义进行屏幕点击等操作。 * 轻量无广告,不联网,也不需要任…

PostgreSQL技术内幕11:PostgreSQL事务原理解析-MVCC

文章目录 0.简介1.MVCC介绍2.MVCC常见的实现方式3.PG的MVCC实现3.1 可见性判断3.2 提交/取消 0.简介 本文主要介绍在事务模块中MVCC(多版本并发控制)常见的实现方式,优缺点以及PG事务模块中MVCC(多版本并发控制)的实现。 1.MVCC…

香港科技大学工学院2025/2026年度硕士研究生(MSc)项目招生宣讲会——哈尔滨工业大学(深圳)

🔔香港科技大学工学院2025/2026年度硕士研究生(MSc)项目招生宣讲会 🕙时间:2024年9月24日(星期二) 19:00 🏠地点:哈尔滨工业大学(深圳)T5栋教学楼603室 🎆2…

如何在ubuntu中安装code-server搭建一个在线编程环境

code-server 是一个开源项目,它允许你在浏览器中运行 Visual Studio Code。通过 code-server,你可以远程访问一个运行 Visual Studio Code 的服务器,并在任何设备上使用浏览器来编辑代码。这使得你可以在轻量级设备上(如平板电脑或…

HDMI色块移动——FPGA学习笔记13

一、方块移动原理 二、实验任务 使用FPGA开发板上的HDMI接口在显示器上显示一个不停移动的方块,要求方块移动到边界处时能够改变移动方向。显示分辨率为800*480,刷新速率为90hz。(480p分辨率为800*480,像素时钟频率Vga_clk 800x4…

EmguCV学习笔记 VB.Net 11.9 姿势识别 OpenPose

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

spring boot 定时器配置

1、首先在主类上加EnableScheduling注解 2、在应用类上加Scheduled注解,同时记得添加spring的组件注解Component,不然无法成功

JavaEE初阶——初识EE(Java诞生背景,CPU详解)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能帮到你! 目录 零:Java的发展背景介绍 一:EE的概念 二:计算机的构成 1:CU…

玖逸云黑系统源码 v1.3.0全解无后门 +搭建教程

功能带有卡密生成和添加黑名单等,反正功能也不是很多具体的自己看程序截图即可。 搭建教程 完成 1.我们先添加一个站点 2.PHP选择7.3 3.上传源码解压 4.导入数据库 5.配置数据库信息config.php 源码下载:https://download.csdn.net/download/m0_6…

openFrameworks_如何设置标题图标

openframework在一些东西的时候很方便,但是有些关于windows设置方面的东西提供的库却很有限。 ofSetWindowTitle("MoTeng Motion Detection Tool v1.0"); HWND handle WindowFromDC(wglGetCurrentDC());//取得环境句柄 setIcon(handle, "data//I…

接口幂等性和并发安全的区别?

目录标题 幂等性并发安全总结 接口幂等性和并发安全是两个不同的概念,虽然它们在设计API时都很重要,但侧重点不同。 幂等性 定义:幂等性指的是无论对接口进行多少次相同的操作,结果都是一致的。例如,HTTP的PUT和DELE…

在网络环境中怎么保护个人信息安全?

在网络环境中保护个人信息安全非常重要,以下是一些基本的建议来帮助您保护自己的个人信息: 使用强密码:确保您的所有在线账户都使用强密码。强密码通常包含大写字母、小写字母、数字以及特殊字符,并且长度至少为12位以上。 启用双…

WAAP解决方案:守护数字时代的安全盾牌

在当今这个数字化、数据驱动的时代,网络安全已成为企业运营中不可或缺的一环。随着Web应用程序和API接口在业务中的广泛应用,其面临的安全威胁也日益复杂多变。为此,WAAP(Web Application and API Protection)解决方案…

制造业的智能化革命:工业物联网(IIoT)的优势、层级应用及挑战解析

在全球制造业的蓬勃发展中,工业物联网(IIoT)作为一股颠覆性力量,正逐步重塑传统制造业的面貌。IIoT技术通过无缝连接设备、系统与人员,促进了数据的即时流通与处理,不仅极大地提升了制造效率,还…

Oracle EBS form个性化中调用带参数的存储过程或者函数

方式1 通过活动-消息 调用 这个方式的特点是会有一个消息弹框,不需要弹框时可以用方式2 方式2 通过 内置-执行过程 这个地方【变元】中的引用有点复杂,其中参数要用如下格式进行 #三个单引号||项目的表达式 ||${item.BLOCKNAME.FIELDNAME.value}|| #如…

2024短剧系统开发,付费短剧小程序app源码教程,分销功能讲解搭建上线

短剧系统技术栈 前端:vue3uniapp 后端: php 数据库:mysql 服务器环境: centos7.6 宝塔 php7.4 MySQL5.7 一、短剧系统功能 短剧用户端: 小程序、抖音小程序、快手小程序、APP、 z付宝小程序 系统用户端详细功能&…