首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Redis系列】事务特性

【Redis系列】事务特性

作者头像
optimistic_chen
发布2026-01-15 12:47:41
发布2026-01-15 12:47:41
160
举报

🚀 欢迎来到我的CSDN博客:Optimistic _ chen一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


🚀我的专栏推荐

专栏

内容特色

适合人群

🔥C语言从入门到精通

系统讲解基础语法、指针、内存管理、项目实战

零基础新手、考研党、复习

🔥Java基础语法

系统解释了基础语法、类与对象、继承

Java初学者

🔥Java核心技术

面向对象、集合框架、多线程、网络编程、新特性解析

有一定语法基础的开发者

🔥Java EE 进阶实战

Servlet、JSP、SpringBoot、MyBatis、项目案例拆解

想快速入门Java Web开发的同学

🔥Java数据结构与算法

图解数据结构、LeetCode刷题解析、大厂面试算法题

面试备战、算法爱好者、计算机专业学生

🔥Redis系列

从数据类型到核心特性解析

项目必备


🚀我的承诺: ✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例

✅ 持续更新:专栏内容定期更新,紧跟技术趋势

✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)


🚀 关注我,解锁更多技术干货! ⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨

📌 标签:#技术博客 #编程学习 #Java #C语言 #算法 #程序员

事务

事务这个词我们之前在数据库中也有学习,并且Redis的事务和MySQL的事务在概念上是类似的,都是把一系列操作绑定成一组操作,让这一组操作批量执行(要么全部成功,要么全部失败)

特性

MySQL

Redis

原子性

完全支持,失败时自动回滚

命令队列整体执行,但无回滚(失败就失败)

一致性

通过约束、外键、事务日志保证

无约束机制,也没有回滚机制

隔离性

支持多种隔离级别

单线程顺序执行:天然隔离

持久性

通过redo/undo log 保证(取决于配置)

AOF持久化部分保证,EXEC后才写入日志

  • MySQL事务是真正的数据库事务,为复杂业务提供强一致性保证
  • Redis事务本质是命令批量执行,适用于高性能场景下的简单原子操作,需结合 WATCH 实现乐观锁。

Redis事务本质上是在服务器上有一个“事务队列”,每次客户端在事务中进行一个操作,都会把命令发给服务器,放到“事务队列”中(但不会并立即执行),正真收到EXEC命令后,才会在队列中执行所以操作。

所以,Redis的事务功能比MySQL弱化很多,只能保证事务中的这⼏个操作是"连续的", 不会被别的客⼾端"加塞",仅此⽽已

事务操作

MULTI

multi:开启一个事务,执行成功返回OK

在这里插入图片描述
在这里插入图片描述

EXEC

exec:真正执行事务

在这里插入图片描述
在这里插入图片描述

每次添加一个操作,都会提示“QUEUED”,说明命令进入客户端队列了,真正执行EXEC命令的时候,客户端才会把这些操作发给服务器,去真正执行命令。

在这里插入图片描述
在这里插入图片描述

DISCARD

discard:放弃当前事务,此时直接清空事务队列,之前在队列中的操作都不会真正执行到

在这里插入图片描述
在这里插入图片描述

WATCH

在执行事务的时候,如果某个事务中修改的值,被别的客户端修改了,此时就容易出现数据不一致的情况

在这里插入图片描述
在这里插入图片描述

从输入命令的时间看,客户端1 执行set k1 111,客户端 2 执行set k1 222, 而从实际的执行时间看,客户端2 执行,客户端 1执行。

这个时候两个客户端都对k1进行修改,肯定有用户得到不符合预期的结果,所以watch命令就解决了这个问题。watch在该客⼾端上监控⼀组具体的key。

  • 当开启事务的时候,如果对watch监控的key进行修改,服务器就会记录当前key的“版本号”
  • 在真正提交事务的时候,如果发现当前服务器上的key的版本号已经超过了事务开启时候的版本号,就会让事务执行失败(事务中所有操作都不执行)
在这里插入图片描述
在这里插入图片描述

总结

  1. 因为redis单线程顺序执行,所以事务期间不会穿插执行其他客户端命令,天然提供隔离性,无需锁机制。
  2. 无回滚设计:Redis 认为语法错误应该在开发阶段发现,运行时错误通常是逻辑错误,应该被修复而非回滚
  3. 批量操作原子性:MULTI开启事务,批量设置多个键值,EXEC真正批量执行命令
  4. watch实现乐观锁并发控制,假设冲突较少,先操作再检查;在保证数据一致性的同时,提供无锁的高并发能力

完结撒花!🎉

如果这篇博客对你有帮助,不妨点个赞支持一下吧!👍 你的鼓励是我创作的最大动力~

想获取更多干货? 欢迎关注我的专栏 → optimistic_chen 📌 收藏本文,下次需要时不迷路!

我们下期再见!💫 持续更新中……


悄悄说:点击主页有更多精彩内容哦~ 😊

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 事务
  • 事务操作
    • MULTI
    • EXEC
    • DISCARD
    • WATCH
  • 总结
  • 完结撒花!🎉
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档