redis事务命令复习
一、Redis事务基础介绍Redis的事务是一套轻量级的命令批量执行机制核心特性可以总结为4点‌核心实现依赖4个命令‌通过MULTI、EXEC、DISCARD和WATCH这四个命令完整完成事务的全流程操作。‌事务的原子性保障对象‌Redis本身的单个命令都是原子性的因此它的事务保障的是‌一组命令集合‌的执行特性。‌执行逻辑‌Redis会将事务内的命令集合序列化确保这一组命令可以连续、不被其他外部请求打断地执行。‌特殊限制‌和传统关系型数据库事务不同Redis不支持事务回滚操作。二、相关核心命令命令作用返回值/表现‌MULTI‌开启事务块。后续命令会被放入队列暂存不会立即执行。OK‌EXEC‌执行事务块中的所有命令。按入队顺序依次执行并返回每个命令的结果。数组包含各命令的执行结果‌DISCARD‌取消事务。清空当前事务队列中的所有命令退出事务状态。OK‌WATCH‌监视一个或多个键。用于实现乐观锁若事务执行前被监视的键被修改则事务执行失败。OK‌UNWATCH‌取消所有由 WATCH 命令监视的键。通常在 EXEC 或 DISCARD 后自动执行也可手动调用。OK1MULTI事务的起始命令这是事务的起始命令相关说明如下作用用于标记一个事务块的开始执行逻辑客户端发送MULTI之后Redis不会立即执行后续发来的命令而是把这些命令逐个放入命令队列中等待后续使用EXEC命令一次性原子化地执行整个队列里的命令序列。语法直接输入MULTI即可触发。2. EXEC 命令核心作用‌它是事务的「提交执行」指令执行逻辑会一次性把之前通过MULTI开启事务后、陆续放入队列的所有命令按入队顺序全部执行完毕。执行完成后客户端就会自动退出事务状态恢复到正常的Redis连接模式。语法‌直接输入 EXEC 即可调用。补充说明执行后会返回一个结果数组数组里的每一项对应事务队列里每一条命令的执行结果。3. DISCARD 命令核心作用‌它是事务的「取消/回滚」指令执行逻辑会直接清空当前事务队列里所有暂存的命令相当于放弃本次事务的所有操作执行后客户端同样会恢复到正常连接状态。语法‌直接输入 DISCARD 即可调用。补充说明如果之前使用了WATCH监听了键执行DISCARD的同时也会自动释放所有被监视的键取消监听状态。4. WATCH 命令核心作用‌它是Redis实现「乐观锁」的核心指令执行逻辑当事务需要满足特定条件才能执行时就可以用WATCH把指定的键标记为受监控状态。如果在你提交EXEC之前这些被监控的键被其他客户端修改过那么本次事务就会直接执行失败所有队列里的命令都不会生效以此避免并发场景下的数据冲突。语法‌支持同时监听多个键格式为 WATCH key [key ...]。典型场景比如秒杀库存扣减、余额条件修改这类需要“先检查条件、再执行操作”的并发场景用WATCH就可以避免超卖、数据不一致的问题。三命令复习multi开启事务开启事务之后讲要操作的命令都放到了QUEUEDqueued队列里然后通过EXEC命令一起提交。对于WATCH命令开启了事务没有提交这时候又有一个客户端进来操作然后前面那个开启事务的提交发现提交成功。这时候看k1被改成了v111。这时候出现另一种情况a线程来修改时候我希望没有其他线程来干扰我这时候开启 监听WATCH。。上面这个操作很顺利没有其他线程干扰也就操作成功。实际情况下可能会收到其他线程干扰下面的命令还没有提交这时候另一个终端连上来执行了k1的修改。此时A线程提交此时提交失败出现了 nilget k1 获取了别人修改过的值四、事务执行流程Redis 事务分为两个阶段‌组队阶段‌和‌执行阶段‌。1. 组队阶段入队执行MULTI后客户端进入事务状态。随后发送的命令如SET,INCR等不会立即执行而是被放入一个临时队列中。服务器对每个入队命令返回QUEUED表示命令已接收并排队。2. 执行阶段提交执行EXEC后Redis 会原子性地按顺序执行队列中的所有命令。在执行过程中其他客户端的命令请求‌不会插入‌到当前事务的命令序列中保证了隔离性。EXEC返回一个数组数组元素对应事务中每个命令的执行结果。3. 取消事务在EXEC之前若执行DISCARD则清空队列放弃本次事务所有命令均不执行。五、错误处理机制Redis 事务的错误处理分为两种情况这是其与 MySQL 事务最大的区别之一1. 语法错误组队阶段失败‌场景‌命令格式错误、参数数量不对等如INCR key1 key2。‌结果‌从 Redis 2.6.5 版本开始如果入队时检测到语法错误执行EXEC时会直接报错‌整个事务中的所有命令都不会执行‌。‌注意‌早期版本可能会忽略错误命令只执行正确的但现代版本已统一为全部拒绝。2. 运行错误执行阶段失败‌场景‌命令语法正确但逻辑错误如对字符串类型的 Key 执行列表操作LPUSH或对不存在的 Key 进行特定运算。‌结果‌‌没有回滚机制‌。出错的命令会返回错误信息但‌事务中其他正确的命令依然会继续执行‌。‌原因‌Redis 设计哲学追求简单高效若支持回滚需记录中间状态会增加复杂度和性能开销。因此开发者需在代码层面保证命令逻辑的正确性。六、乐观锁与 WATCH 机制由于 Redis 事务不支持回滚若需解决并发冲突如秒杀超卖通常结合WATCH实现‌乐观锁‌。工作原理‌监视‌使用WATCH key监视目标键。‌组队‌执行MULTI开启事务编写业务逻辑命令。‌检查与执行‌执行EXEC时Redis 会检查被监视的键是否在WATCH之后、EXEC之前被其他客户端修改过。‌若未修改‌正常执行事务。‌若已修改‌事务执行失败返回nil所有命令不执行。示例场景# 客户端 A 127.0.0.1:6379 WATCH stock # 监视库存 OK 127.0.0.1:6379 MULTI # 开启事务 OK 127.0.0.1:6379(TX) DECR stock # 扣减库存 QUEUED 127.0.0.1:6379(TX) EXEC # 提交事务 1) (integer) 99 # 执行成功 # 客户端 B (在 A 执行 EXEC 前修改了 stock) 127.0.0.1:6379 SET stock 100 # 修改了被监视的键 OK # 此时客户端 A 再执行 EXEC 127.0.0.1:6379(TX) EXEC (nil) # 返回 nil事务失败需重试七、总结与注意事项‌非原子性狭义‌Redis 事务不保证“要么全成功要么全失败”的回滚原子性仅保证执行过程的隔离性和顺序性。‌无隔离级别‌Redis 是单线程模型事务执行期间不会被其他命令打断因此不存在传统数据库的脏读、不可重复读等问题无需设置隔离级别。‌适用场景‌适用于需要批量执行、防止命令插队的场景。若需强一致性或复杂条件判断建议使用 ‌Lua 脚本‌因为 Lua 脚本在 Redis 中原子执行且支持逻辑判断功能更强大。

相关新闻

TMSpeech终极指南:Windows平台专业实时语音识别解决方案

TMSpeech终极指南:Windows平台专业实时语音识别解决方案

TMSpeech终极指南:Windows平台专业实时语音识别解决方案 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech TMSpeech是一款专为Windows平台设计的专业级实时语音识别工具,通过WASAPI音频捕获技术…

2026/10/20 18:12:47 阅读更多 →
WorkshopDL:无需Steam客户端的742+款游戏模组下载神器

WorkshopDL:无需Steam客户端的742+款游戏模组下载神器

WorkshopDL:无需Steam客户端的742款游戏模组下载神器 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为Steam创意工坊的丰富模组而心动,却因为游戏不…

2026/10/19 22:11:51 阅读更多 →
绕过Git代码检查提交代码(Git提交前代码检查报错:lint-staged failed due to a git error)

绕过Git代码检查提交代码(Git提交前代码检查报错:lint-staged failed due to a git error)

异常: 代码的警告和Error都已经改正了,依旧提交不了…解决(完整提交步骤): # 拉取最新的远程代码 git pull # 添加所有已修改代码到暂存区 git add .用--no-verify跳过这次代码检查!!! # 提交代码到本地仓库…

2026/10/20 14:36:05 阅读更多 →

最新新闻

生物医学传感器信号链设计:从换能原理到工程实践

生物医学传感器信号链设计:从换能原理到工程实践

简介:山东大学《生物医学传感器与测量》国家精品课程课件共447页,压缩包内为单个PDF文件,总大小46.57MB。课程面向生物医学工程、传感器技术相关专业学生,以及智能手环、血氧仪等可穿戴设备研发和医疗仪器应用工程师。内容从绪论入…

2026/10/20 18:13:46 阅读更多 →
Android语音识别与TTS实战:从崩溃到稳定闭环

Android语音识别与TTS实战:从崩溃到稳定闭环

1. 这不是“调个API就完事”的语音开发——为什么新手常在第一步就卡死三天“Android 智能语音开发新手入门实战”——看到这个标题,我猜你大概率已经点开过三四个教程,结果要么是照着敲完代码,App一运行就报SpeechRecognizer not available&…

2026/10/20 18:13:46 阅读更多 →
OpenCV+Python车牌识别实战:传统图像处理管线实现稳定识别

OpenCV+Python车牌识别实战:传统图像处理管线实现稳定识别

简介:这是一套基于OpenCV与Python实现的车牌识别系统,附带项目报告,定位为期末大作业和课程设计参考,适合计算机相关专业学生及需要视觉项目实战练习的学习者。项目覆盖车牌图像预处理(灰度化、滤波去噪、二值化&#…

2026/10/20 18:13:46 阅读更多 →
端到端VLA上船:海洋具身智能真实海试技术拆解

端到端VLA上船:海洋具身智能真实海试技术拆解

“端到端”这个概念,在智驾圈已经吵了好几年,但大家聊的基本都是四个轮子的车。最近某海洋大学(筹)把一套VLA端到端自动驾驶系统装到了无人船上,在真实海域跑完了验证,还打出了“海洋具身智能全球首发”的旗…

2026/10/20 18:13:46 阅读更多 →
AI编程安全:用pre-push代码扫描拦截AI生成代码的隐性风险

AI编程安全:用pre-push代码扫描拦截AI生成代码的隐性风险

AI编程工具普及之后,最让我头疼的其实不是代码质量下降,而是安全审查的工作量在成倍往上翻。以前Review一个PR,主要看逻辑对不对、命名规不规范;现在Review一个PR,得先回答一个问题:这段代码到底是人写的还…

2026/10/20 18:13:46 阅读更多 →
AI代理“猜你有钱就推贵的”:基于购买力评估的推荐价格带动态调整策略

AI代理“猜你有钱就推贵的”:基于购买力评估的推荐价格带动态调整策略

先说个真实的感受。做推荐系统的人都知道,模型调来调去,无非是在“猜用户想要什么”上打转。但你有没有想过一个问题:系统会不会猜用户“买得起什么”?我最近复盘了一个实验项目,项目代号干脆就叫“模拟项目X”&#x…

2026/10/20 18:12:45 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →