Redis 事务支持回滚吗?

简介: Redis 事务支持回滚吗?

Redis 事务支持回滚吗?


文章目录

Redis 事务支持回滚吗?

首选,Redis 事务不支持回滚

MySQL 在执行事务时,会提供回滚机制,当事务执行发生错误时,事务中的所有操作都会撤销,已经修改的数据也会被恢复到事务执行前的状态。Redis 中并没有提供回滚机制

官方解释

我们来查看 Redis 的官方文档来再来找一找答案:

文档地址:https://redis.io/topics/transactions

官方文档的解释如下:

大概的意思是,Redis 不支持事务回滚,因为支持回滚会对 Redis 的简单性和性能产生重大影响。因为事务回滚本身是一种复杂的功能,这和 Redis 追求的简单高效的设计主旨不符合。

虽然,Redis不支持事务回滚,但是 Redis 提供了 DISCARD 命令,不过这个命令只能用来主动放弃事务执行,把暂存的命令队列清空,起不到回滚的效果。

DISCARD 命令取消事务

下面是 DISCARD 命令用法:

#读取 num 的值666
127.0.0.1:6379> GET num 
"666"
#开启事务
127.0.0.1:6379> MULTI 
OK
#发送事务的第一个操作,对num 减1
127.0.0.1:6379> DECR num 
QUEUED
#执行DISCARD命令,主动放弃事务
127.0.0.1:6379> DISCARD
OK
#再次读取值没有被修改
127.0.0.1:6379> GET num 
"666"

事务执行过程中,如果命令入队时没报错,而事务提交后,实际执行时报错了,正确的命令依然可以正常执行,所以这可以看出 Redis 并不一定保证原子性原子性:事务中的命令要不全部成功,要不全部失败)。

比如下面这个测试案例:

#获取name原本的值
127.0.0.1:6379> GET name
"yang"
#开启事务
127.0.0.1:6379> MULTI
OK
#设置新值
127.0.0.1:6379(TX)> SET name yangyongli
QUEUED
#注意,这条命令是错误的
# expire 过期时间正确来说是数字,并不是‘10s’字符串,但是还是入队成功了
127.0.0.1:6379(TX)> EXPIRE name 10s
QUEUED
#提交事务,执行报错
#可以看到 set 执行成功,而 expire 执行错误。
127.0.0.1:6379(TX)> EXEC
1) OK
2) (error) ERR value is not an integer or out of range
#可以看到,name 还是被设置为新值了
127.0.0.1:6379> GET name
"yangyongli"


相关文章
|
缓存 NoSQL Redis
Redis 事务
10月更文挑战第18天
142 1
|
3月前
|
监控 NoSQL 关系型数据库
Redis:事务(Transactions)
Redis事务支持将多个命令打包执行,但与MySQL不同,它不保证原子性、一致性、持久性和隔离性。Redis事务的核心在于“打包”命令,避免其他客户端插队,通过MULTI、EXEC、DISCARD等命令实现。此外,Redis提供WATCH和UNWATCH机制,用于监控键变化,实现类似“乐观锁”的功能,提升并发操作的安全性。
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
NoSQL Redis
Redis事务长什么样?一文带你全面了解
Redis事务是一组命令的有序队列,通过MULTI、EXEC、WATCH和DISCARD等命令实现原子性操作。事务中的命令在EXEC执行前不会实际运行,而是先进入队列,确保所有命令要么全部成功,要么全部失败。此外,Redis还支持Lua脚本实现类似事务的操作,通常更简单高效。事务适用于购物车结算、秒杀活动、排行榜更新等需要保证数据一致性的场景。
162 0
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
153 2
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
1414 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
监控 NoSQL 关系型数据库
9)Redis 居然也有事务
9)Redis 居然也有事务
132 0
|
NoSQL 关系型数据库 MySQL
Redis(事务)
Redis(事务)
114 2
|
监控 NoSQL Redis
Redis事务和Redis管道
Redis事务和Redis管道
126 0