redis中的乐观锁

redis中的乐观锁


前言

上一篇的文章我们说了redis在运行异常的情况下没法回滚,编译错误的情况下会回滚,其实还有一种情况,即通过加了乐观锁的方式。

乐观锁,一种轻量级的锁,通过cas(compare and swap)的操作对值进行修改或者不修改,cas会导致ABA问题,但通过引入版本号可以解决。

实践

watch..unwatch进行加锁或者解锁。一开始设置surplus是40,然后加锁,开启事务(这里我只用了一条命令模拟),设置surplus为50,通过上篇文章,我们可以知道此事命令只是进入队列并未执行。

在这里插入图片描述

接下来,我开启了另一个操作界面并连接redis,将surplus设置为1000,可以执行成功。

在这里插入图片描述

此事再来执行事务,你会发现,执行不成功,因为加了乐观锁,在执行的时候发现被修改过了。

在这里插入图片描述

在实际运用中,记得当执行失败后,要进行unwatch,释放锁的操作,然后再重新获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

legendaryhaha

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

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

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

打赏作者

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

抵扣说明:

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

余额充值