【Redis】事务:事务操作、放弃事务、两类事务错误;Watch:实现乐观锁

本文介绍了Redis的事务特性,虽然单个命令原子性,但事务执行非原子性,允许部分命令成功。还探讨了乐观锁的概念,通过Redis的Watch命令实现,用于监控key防止并发冲突。在事务执行过程中,如果被监视的key被修改,事务将被中断。
摘要由CSDN通过智能技术生成

1 Redis 事务

1.1 介绍

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
在这里插入图片描述

1.2 事务操作

具体实践:开始事务、命令入队、执行事务
在这里插入图片描述

1.3 放弃事务

在这里插入图片描述

1.4 事务错误

若是在命令编译阶段报错,则事务中所有命令都不会执行,如下:
在这里插入图片描述

若是在命令运行阶段报错,则其他命令都可以正常执行,仅那条报错的命令不会生效,如下:
在这里插入图片描述

因此,Redis 中的事务没有原子性的特性。

2 乐观锁

2.1 介绍

(下面是 B站UP主-遇见狂神说 对于这两种锁的解释,我并不认为解释的多严谨,但是却相当的简洁和形象,因此截图记录在本文)
在这里插入图片描述

2.2 监视 key

Redis Watch 命令可实现乐观锁,Watch 用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断(因此,在 Redis 中,给字段加乐观锁用 Watch 命令就可以)。

下图为,事务执行时,即 EXEC 命令后,被监视的 money 没被其他操作修改的情况:
在这里插入图片描述
下图为,事务执行时,即 EXEC 命令后,被监视的 money 被其他操作修改的情况:
在这里插入图片描述

之后,若还想监视 money,并且希望可以执行相应命令,则需要更新 money 在监视环境中的值,即先解除监视,再重新监视
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

超周到的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值