Redis事务学习笔记
文章目录前言一、先搞懂Redis事务到底是什么二、四大核心命令 课堂实操案例1. MULTI EXEC 正常提交事务2. DISCARD 放弃事务清空队列3. WATCH 乐观锁解决并发数据冲突三、致命大坑Redis事务**不支持自动回滚**场景1组队阶段语法错误 → 整个事务全部作废场景2组队无错误执行时报错 → 正确命令正常生效不会回滚官方不做回滚的设计原因面试标准答案四、Redis事务 VS MySQL事务 ACID对比Redis事务独有两个特性五、Redis事务适用不适用场景适合使用不推荐使用六、期末/面试高频简答题汇总结尾小结前言Redis事务不同于MySQL事务接下来请跟随我的脚步一起来学习吧提示以下是本篇文章正文内容下面案例可供参考一、先搞懂Redis事务到底是什么Redis事务和MySQL事务初衷相似把多条Redis命令打包成一组操作执行过程中不会被其他客户端请求插队打断。但两者本质差别巨大MySQL完整支持ACID四大特性Redis只是简易事务原子性残缺、没有隔离级别、出错不会自动回滚。Redis事务分为两大阶段组队阶段入队执行MULTI开启事务后续输入的所有命令不会立刻执行全部存入事务队列控制台返回QUEUED排队标识中途不想提交可以用DISCARD清空整个队列直接放弃本次事务。执行阶段批量运行输入EXEC提交事务Redis会单线程串行执行队列里所有指令执行期间阻塞其他客户端请求保证命令不会穿插执行。二、四大核心命令 课堂实操案例1. MULTI EXEC 正常提交事务流程开启事务→批量写入命令→提交统一执行127.0.0.1 MULTI # 开启事务 OK 127.0.0.1(TX) set username eric QUEUED 127.0.0.1(TX) set age 20 QUEUED 127.0.0.1(TX) get username QUEUED 127.0.0.1(TX) EXEC # 提交批量执行所有排队命令 1) OK 2) OK 3) eric关键点组队阶段无法查询数据只有执行EXEC后数据修改才会真正生效。2. DISCARD 放弃事务清空队列写了一半发现逻辑错误不想提交直接丢弃所有排队指令不会产生任何数据变更127.0.0.1 MULTI OK 127.0.0.1(TX) set k1 v1 QUEUED 127.0.0.1(TX) DISCARD # 放弃事务 OK 127.0.0.1 get k1 (nil)3. WATCH 乐观锁解决并发数据冲突这是Redis事务最核心的拓展命令也是面试必考题。作用事务开启前监控一个或多个key如果在EXEC执行前这些key被其他客户端修改本次事务直接作废所有命令都不会执行。模拟场景账户余额100两个客户端同时发起扣款操作客户端1操作127.0.0.1 set balance 100 OK 127.0.0.1 WATCH balance # 监控余额key OK 127.0.0.1 MULTI OK 127.0.0.1(TX) decrby balance 80 QUEUED # 切到客户端执行扣款客户端2并发操作127.0.0.1 decrby balance 50 (integer) 50切回客户端1执行提交127.0.0.1(TX) EXEC (nil) # 返回nil事务失效防止超扣原理和数据库乐观锁版本号思路一致完美解决并发修改覆盖问题。三、致命大坑Redis事务不支持自动回滚90%初学者都会踩这个雷分两种报错场景区分期末必考场景1组队阶段语法错误 → 整个事务全部作废输入命令格式非法入队时直接报错后续执行EXEC会直接丢弃所有指令一条都不执行。127.0.0.1 MULTI OK 127.0.0.1(TX) set k1 # 缺少value语法错误入队报错 (error) ERR wrong number of arguments for set 127.0.0.1(TX) set k2 v2 QUEUED 127.0.0.1(TX) EXEC (error) EXECABORT Transaction discarded because of previous errors. # k1、k2均无数据场景2组队无错误执行时报错 → 正确命令正常生效不会回滚命令语法没问题但操作数据类型不匹配执行失败时其他正常执行的命令不会撤销。127.0.0.1 MULTI OK 127.0.0.1(TX) set num 100 # 正常指令 QUEUED 127.0.0.1(TX) incr numstr # numstr不存在无法自增执行报错 QUEUED 127.0.0.1(TX) set name eric # 正常指令 QUEUED 127.0.0.1(TX) EXEC 1) OK 2) (error) ERR value is not an integer or out of range 3) OK执行完成后num100、nameeric真实存入Redis报错语句直接跳过没有任何回滚操作。官方不做回滚的设计原因面试标准答案Redis核心定位是高性能缓存回滚机制会增加底层代码复杂度大幅降低执行效率语法、数据类型错误都属于开发阶段bug上线前单元测试就能提前规避不需要线上兜底回滚如果需要完整原子执行、出错全部回滚的能力优先使用Lua脚本。四、Redis事务 VS MySQL事务 ACID对比很多面试官会提问Redis事务满足标准ACID吗一张表讲清差异四大特性MySQL事务Redis MULTI事务原子性(A)完全满足要么全部成功失败全部回滚残缺执行过程不插队但单条命令出错不会回滚其他操作一致性©内置约束保障异常自动修复数据合法无内置机制一致性需要业务代码自行维护隔离性(I)提供四大隔离级别读写互不干扰无隔离级别概念事务未提交的数据全局可见持久性(D)提交后数据永久落盘和事务无关由RDB/AOF持久化配置控制Redis事务独有两个特性串行执行EXEC运行期间Redis单线程只处理当前事务队列外部请求全部阻塞无中间态组队阶段的修改不会对外可见只有提交后才生效。五、Redis事务适用不适用场景适合使用批量缓存写入多条命令需要连续执行、不被其他请求打断简单并发控制库存扣减、账户余额变更搭配WATCH乐观锁轻量统计类批量操作对数据一致性要求不高。不推荐使用金融核心业务转账、订单支付零容忍数据错乱Redis集群环境多键分属不同slot时MULTI无法批量操作复杂多分支业务逻辑需要完整原子回滚补充需要强原子性统一用Lua脚本脚本执行全程不可中断出错不会半写入数据。六、期末/面试高频简答题汇总Redis事务分为哪两个阶段答组队阶段MULTI入队命令标记QUEUED、执行阶段EXEC批量执行DISCARD命令可以直接丢弃未提交的事务队列。WATCH命令的作用是什么答实现Redis乐观锁监控指定key若事务提交前key被外部客户端修改EXEC会返回nil整个事务作废。Redis事务为什么不支持回滚答Redis主打高性能回滚会增加底层复杂度语法、类型错误属于开发bug测试阶段可提前发现需要完整原子操作推荐Lua脚本。两种事务报错处理有什么区别答①入队时语法错误整个事务直接作废②组队无错、执行时报错正常命令正常保存错误语句跳过不会回滚。Redis事务完整支持ACID吗答不支持。原子性残缺、无隔离级别一致性需要业务代码维护持久性由持久化配置决定和事务本身无关。结尾小结之前一直用MySQL事务的固有思维写Redis代码踩了不少坑现在彻底分清两者的区别Redis事务只是命令批量打包工具不是传统关系型数据库的标准事务。日常简单批量缓存操作、简单并发扣减场景使用MULTIWATCH完全够用但支付、订单这类对数据一致性要求极高的业务要么使用Lua脚本要么把核心事务逻辑交给MySQL处理。

相关新闻

APARENT vs 传统方法:为什么深度学习是RNA调控预测的未来

APARENT vs 传统方法:为什么深度学习是RNA调控预测的未来

SiamMask源码剖析:深入理解跟踪算法的实现细节 【免费下载链接】SiamMask [CVPR2019] Fast Online Object Tracking and Segmentation: A Unifying Approach 项目地址: https://gitcode.com/gh_mirrors/si/SiamMask SiamMask目标跟踪算法作为CVPR2019的突破性…

2026/10/16 0:51:47 阅读更多 →
Lean 4完整指南:如何用形式化验证构建零缺陷软件

Lean 4完整指南:如何用形式化验证构建零缺陷软件

Lean 4完整指南:如何用形式化验证构建零缺陷软件 【免费下载链接】lean4 Lean 4 programming language and theorem prover 项目地址: https://gitcode.com/GitHub_Trending/le/lean4 Lean 4是一款革命性的编程语言和定理证明器,它将数学的严谨性…

2026/10/16 1:05:02 阅读更多 →
干掉希沃管家:终极杀进程指南

干掉希沃管家:终极杀进程指南

目录 ​引​入​​杀​!​​写​成​P​y​t​h​o​n​脚​本​​写​成​C​脚​本​​结​尾​ ​本​文​由​J​z​w​a​l​l​i​s​e​r​原​创​,​发​布​在​C​S​D​N​平​台​上​,​遵​循​CC 4.0 BY-NC-SA协​议​。​ ​…

2026/10/16 1:06:45 阅读更多 →

最新新闻

HBuilder打包Web项目下载失效的根源与plus.downloader实战方案

HBuilder打包Web项目下载失效的根源与plus.downloader实战方案

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

2026/10/16 5:55:44 阅读更多 →
asc-devkit Coordinate 辅助数据结构详解:基于 Coord、MakeCoord 与 Crd2Idx 的编译期坐标索引转换

asc-devkit Coordinate 辅助数据结构详解:基于 Coord、MakeCoord 与 Crd2Idx 的编译期坐标索引转换

人工智能深度学习算子库CANNAscend 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址&…

2026/10/16 5:55:44 阅读更多 →
PyQt5+pyqtgraph实现高性能动态连续波形图:从卡顿到流畅的实战指南

PyQt5+pyqtgraph实现高性能动态连续波形图:从卡顿到流畅的实战指南

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

2026/10/16 5:55:44 阅读更多 →
C语言指针学习全指南:内存地址、数组、字符串与函数参数详解

C语言指针学习全指南:内存地址、数组、字符串与函数参数详解

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

2026/10/16 5:55:44 阅读更多 →
emj.js:即时通讯前端表情解析模块的设计与实现

emj.js:即时通讯前端表情解析模块的设计与实现

1. 项目概述:emj.js 到底是什么先说说这个名字本身。在即时通讯项目的代码库里看到emj.js,第一反应通常是“这不是表情模块吗”,但实际上它承载的事情远比一个表情文件要多。emj.js是我参与维护的一个即时通讯应用中专门处理“文本转表情”和…

2026/10/16 5:55:44 阅读更多 →
GhostTrack 完整指南:3 条命令跑通命令行 IP 定位、手机号查询与用户名追踪

GhostTrack 完整指南:3 条命令跑通命令行 IP 定位、手机号查询与用户名追踪

GhostTrack 完整指南:3 条命令跑通命令行 IP 定位、手机号查询与用户名追踪 【免费下载链接】GhostTrack Useful tool to track location or mobile number 项目地址: https://gitcode.com/GitHub_Trending/gh/GhostTrack 远程合作或二手交易前,对…

2026/10/16 5:54:44 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →