关于锁,相信各位在很多场景都遇到过,数据库里面的锁,Java 里面的锁等等。这次,小编和大家分享一下 Redis 的乐观锁,用最通俗易懂的方式让各位了解到这种锁,怎么出现,怎么用的。乐观锁是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。
    下面小编进行具体演示:

1,登录Redis。下面的指令均在 Docker 里面部署的 Redis 进行。如果各位的环境还没部署好,可以参考小编之前的文章:Ubuntu 部署 Docker 完整步骤Docker 部署 Redis 完整步骤

2,定义一个 key,开启两个redis客户端,监控这个key。

#####################(窗口1)
127.0.0.1:6379> keys *    #查看已经存在的key, balance值是100,没有的话可以创建一下
1) "balance"
127.0.0.1:6379> watch balance  #监控key
OK
#####################(窗口2)
127.0.0.1:6379> watch balance
OK

3,开启事务

######################(窗口1)
127.0.0.1:6379> multi       #开启事务
OK
127.0.0.1:6379> incrby balance 10    #设置key 增长10,进入执行队列
QUEUED
######################(窗口2)
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incrby balance 30   #设置key 增长30,进入执行队列
QUEUED

4,执行

######################(窗口1)
127.0.0.1:6379> exec   #执行
1) (integer) 110
######################(窗口2)
127.0.0.1:6379> exec
(nil)   ##无法执行,此时即为乐观锁场景
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐