Redis实现乐观锁

使用watch实现乐观锁

redis可以使用watch观察一个key,如果在事务期间数据没有发生变动就正常执行

127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> set out 0
OK
127.0.0.1:6379> watch money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> decrby money 20
QUEUED
127.0.0.1:6379(TX)> incrby out 20
QUEUED
127.0.0.1:6379(TX)> exec
1) (integer) 80
2) (integer) 20
127.0.0.1:6379> 

模拟出现多个线程更新情况

我们开两个终端使用redis服务

我们先在第一个终端敲好事务代码 但并不去执行它

开启第二个终端执行修改money操作

那么此时执行终端一的事务就会失败

此时watch就充当了乐观锁的作用

解锁

使用命令unwatch key解除对某个key的观察

posted @ 2021-09-02 11:18  一个经常掉线的人  阅读(237)  评论(0)    收藏  举报