Redis事务操作

Redis事务具有一次性、顺序性和排他性特点。通过MULTI、EXEC、DISCARD命令进行事务管理。在事务执行期间,若出现命令错误,事务仍可提交但异常命令不会执行。Redis乐观锁通过WATCH命令监控数据变化,当字段被修改时,事务将失败,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事务简单来说就是把多条语句放在一起执行就叫事务。要么全执行,要么全不执行。
Redis中的事务具有的特点是:一次性、顺序性、排他性。

一次性:指的是Redis中的事务只执行一次,在该事务执行结束之后,这条事务的生命周期就结束了,再次执行事务时需要重新开启事务。
顺序性:指Redis的事务中的所有命令,都是按照先后顺序依次执行的。
排他性:指事务在对某一个数据进行操作的同时,其他事务或其他命令不能对这个数据进行操作。

1.开启事务命令:MULTI
2.命令入队:可以任意写入想要执行的命令如set key value。返回QUEUED,表示入队成功!
3.提交事务:EXEC

在这里插入图片描述

(2)取消事务执行
取消事务:DISCARD
在这里插入图片描述

(3)事务编译时异常
在事务执行或者命令入队的时候发生错误,事务仍能提交,但是提交之后,整个事务队列中的命令都不会执行.

比如:写入一个不存在的命令并提交执行,执行后去查看数据是否添加成功
在这里插入图片描述

(4)运行时异常
在Redis中如果事务中的命令存在运行时异常,那么在提交事务之后,不存在异常的命令同样会被执行,异常的命令会单独执行失败!

在这里插入图片描述

(5)Redis乐观锁实现

Redis中锁可以分为乐观锁和悲观锁,
悲观锁:认为什么时候都可能出错,所以在任何时候都会加锁
乐观锁:认为什么时候都不会出错,所以什么时候都不会加锁,在更新数据的时候只需要去判断,在此期间是否有人修改过这个数据即可!

监控要操作的字段:WATCH key

在这里插入图片描述
以上正确操作。

现在重复刚才的操作(正常情况下money应该变成80),但是并不急着提交事务,而且开启一个新的Redis客户端,在其中对我们的money加10,之后再提交上一个上一个事务,就会提示我们的money已经被修改,这个时候事务一定是执行失败的!
在这里插入图片描述
在这里插入图片描述

这就说明,在给字段添加监控的情况下通过事务去操作字段,如果在未提交时,有新的命令修改了字段值,那么事务一定会提交失败,但是在未监控的情况下,事务仍能提交成功!这就是Redis的乐观锁实现!

所以在实现乐观锁时,开启事务之前,一定要先给字段增加监控!

所以:Redis是可以实现乐观锁的!(面试的时候可是经常会问的!)

另外注意:Redis在每次事务提交之后,无论事务执行成功与否,该事务都会关闭,监控也会自动取消,在下次执行事务时都需要重新开启!

参考文章:https://blog.youkuaiyun.com/weixin_44985880/article/details/122523003

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值