redis事务

本文深入探讨了Redis事务的特性,包括其本质是命令集合、无隔离级别以及单条命令的原子性。在编译时,如果事务中出现错误,整个事务会被回滚,保持原子性;但在运行时,错误可能导致后续命令执行,不具备原子性。通过实例展示了编译时和运行时异常对事务的影响,揭示了Redis事务在不同情况下的行为。
摘要由CSDN通过智能技术生成

redis事务

1.redis事务的本质是一组命令的集合,一个事务中的所有命令会被序列化,在事务执行过程中,会按顺序执行
2.redis事务没有隔离级别,所有命令只是保存在队列中,并没有被执行
3.单条命令保证原子性,但是事务是不保证原子性的,(编译时错误是有原子性的,运行时错误是没有原子性的,报错时下面的命令还是会被执行)

正常情况下

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a 1
QUEUED
127.0.0.1:6379> set b  2
QUEUED
127.0.0.1:6379> set c 3
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK

编译时异常

127.0.0.1:6379> multi 
OK
127.0.0.1:6379> set k1 a
QUEUED
127.0.0.1:6379> set k2 b
QUEUED
127.0.0.1:6379> setget k3
(error) ERR unknown command `setget`, with args beginning with: `k3`, 
127.0.0.1:6379> set k4 d
QUEUED
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get k4
(nil)

结论:编译时事务是有原子性的

运行时异常

127.0.0.1:6379> set k1 "a"
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr k1
QUEUED
127.0.0.1:6379> set k2 "b"
QUEUED
127.0.0.1:6379> exec
1) (error) ERR value is not an integer or out of range
2) OK
127.0.0.1:6379> get k2
"b"

结论:运行时事务不具有原子性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桀骜浮沉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值