【Redis系列】事务特性

🚀 欢迎来到我的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

📌 收藏本文,下次需要时不迷路!

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


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

相关推荐
网络工程小王12 分钟前
【Transformer架构详解】(学习笔记)
笔记·学习
北风toto15 分钟前
前端CSS样式详细笔记
前端·css·笔记
倔强的石头_17 分钟前
从 “不得不存” 到 “战略必争”:工业数据的价值觉醒之路
数据库
倔强的石头_32 分钟前
新型电力系统应该用什么数据库?——时序数据库选型与落地实战
数据库
南汐以墨1 小时前
一个另类的数据库-Redis
数据库·redis·缓存
Heartache boy1 小时前
野火STM32_HAL库版课程笔记-手动建立工程模板与CubeMX后续用法(重要)
笔记·stm32·单片机·嵌入式硬件
RInk7oBjo2 小时前
spring-事务管理
数据库·sql·spring
希望永不加班2 小时前
SpringBoot 数据库连接池配置(HikariCP)最佳实践
java·数据库·spring boot·后端·spring
黑牛儿2 小时前
MySQL 索引实战详解:从创建到优化,彻底解决查询慢问题
服务器·数据库·后端·mysql
捧月华如2 小时前
RAG 入门-向量存储与企业级向量数据库 milvus
数据库·milvus