Redis入门(四)—— 乐观锁

一、乐观锁

乐观锁认为无论什么时候都不会出现问题,所以不会上锁,只是在更新数据的时候,会去比对某个字段,查询在这期间是否有人操作过这个数据。

乐观锁主要用于抢红包淘宝抢购秒杀之类

其他客户端每一次提交数据都会数据库的数据版本进行修改,当本次提交时会对版本进行比较,要是版本低于本次版本则会提示失败。

不冲突冲突
在这里插入图片描述在这里插入图片描述

二、实现乐观锁

通过watch实现乐观锁。开启两个终端:
终端1:

127.0.0.1:6379> set a 40
OK
127.0.0.1:6379> set b 20
OK
127.0.0.1:6379> watch a b //监视key:a、b
OK
127.0.0.1:6379> multi //开始事务
OK
127.0.0.1:6379> incr a
QUEUED

在终端1的事务未执行前,在终端2对监视的键值进行操作:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr a
QUEUED
127.0.0.1:6379> exec
1) (integer) 41

返回终端1执行事务,因为watch监视到key发生改变,事务执行失败,返回nil
在这里插入图片描述

注意:在事务执行完毕后,相应的watch生命周期结束

在上述操作之后,在两个终端再执行两次的操作
终端1:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr b
QUEUED

终端2:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr b
QUEUED
127.0.0.1:6379> exec
1) (integer) 21

终端1执行业务,事务依旧执行,并未失败
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值