本文共 394 字,大约阅读时间需要 1 分钟。
上一篇的文章我们说了redis在运行异常的情况下没法回滚,编译错误的情况下会回滚,其实还有一种情况,即通过加了乐观锁的方式。
乐观锁,一种轻量级的锁,通过cas(compare and swap)的操作对值进行修改或者不修改,cas会导致ABA问题,但通过引入版本号可以解决。
watch..unwatch进行加锁或者解锁。一开始设置surplus是40,然后加锁,开启事务(这里我只用了一条命令模拟),设置surplus为50,通过上篇文章,我们可以知道此事命令只是进入队列并未执行。
接下来,我开启了另一个操作界面并连接redis,将surplus设置为1000,可以执行成功。
此事再来执行事务,你会发现,执行不成功,因为加了乐观锁,在执行的时候发现被修改过了。
在实际运用中,记得当执行失败后,要进行unwatch,释放锁的操作,然后再重新获取。
转载地址:http://koxm.baihongyu.com/