27、Redis 7系列:事务详解

一、官网

地址: Transactions | Redis
在这里插入图片描述

二、介绍

可以一次性执行多个命令,本质是一组命令的集合。一个事务中,所有命令都会序列化,按顺序的串行化执行,不会别其他命令插入,不允许加塞。
一个队列中,一次性、顺序性、排他性的执行一系列命令。
特点:

特点描述
单独的隔离操作Redis 的事务仅仅是保证事务里的操作会被连续独占的执行,Redis 命令执行是单线程架构,在执行完事务内所有指令前是不可能再去同时执行其他客户端的请求的
没有隔离级别的概念因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这种问题了
不保证原子性Redis 的事务 不保证原子性 ,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力
排它性Redis 会保证一个事务内的命令依次执行,而不会被其它命令插入

三、事务命令

命令描述
MULTI标记一个事务块的开始。
EXEC执行所有事务块内的命令。
DISCARD取消事务,放弃执行事务块内的所有命令。
WATCH key [key …]监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
UNWATCH取消 WATCH 命令对所有 key 的监视。

四、五大案例类型

1、正常执行

关键字: MULTIEXEC

# 测试案例如下:
MULTI
set k1 v1
set k2 v2
set k3 v3
set ···
EXEC

如图所示,可以获取 k3 的值。所以,事务已经正常执行。
在这里插入图片描述

2、取消事务

关键字: MULTIDISCARD

# 测试案例如下:
MULTI
set k1 v11
set k2 v22
set k3 v33
set ···
DISCARD

如图所示,k3 的值仍为 v3 。所以,事务已经取消。
在这里插入图片描述

3、全体连坐

如果一个有错误,则全都不执行。
关键字: MULTIEXEC

# 测试案例如下:
MULTI
set k1 v111
set k2 v222
set k3 
set ···
EXEC

一荣俱荣,一损俱损。覆巢之下,岂有完卵!在这里插入图片描述

4、冤头债主

当有的命令有错误,不影响其他正确的命令继续执行。由此可见, Redis 不是绝对的事务一致性。同时也 没有回滚 机制。
关键字: MULTIEXEC

# 测试案例如下:
MULTI
set k1 v111
set k2 v222
set INCR k3
set ···
EXEC

如图所示,发现 Redis 和传统数据库事务上的区别, Redis 不一定必须一起成功一起失败。
在这里插入图片描述

5、WATCH监控

悲观锁: 悲观锁在操作数据时比较悲观,认为别人会同时修改数据。因此操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据。

乐观锁: 乐观锁在操作数据时非常乐观,认为别人不会同时修改数据。因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据。如果别人在此期间修改了数据则放弃操作,否则执行操作。
乐观锁策略: 提交版本必须 大于 记录当前版本才能执行更新。

Redis 使用 WATCH 来提供 乐观锁 ,用于为 Redis 事务提供检查和设置,类似于 CAS(check-and-set) 行为。 key 被监控,以便检测它的变化。如果在执行 EXEC 命令之前至少修改了一个 key 所对应的 value ,那么整个事务将终止,EXEC 返回一个 Null 应答来通知事务失败。

开启监控测试案例:
在这里插入图片描述
在这里插入图片描述

关闭监控测试案例:
在这里插入图片描述
拓展:
(1)一旦执行了 EXEC ,之前添加的监控锁都会被取消掉。
(2)当客户端连接丢失(比如退出连接),所有的 key 都会被取消监控。

五、总结

1、开启事务:MULTI
2、将多个命令放到队列中。这些命令并不会被执行,而是放到等待执行的队列中。
3、触发事务:EXEC


到这里 Redis 7事务 就结束了!!!🎉🎉🎉
欢迎小伙伴们学习和指正!!!😊😊😊
祝大家学习和工作一切顺利!!!😎😎😎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值