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服务
Redis实现乐观锁_乐观锁
我们先在第一个终端敲好事务代码 但并不去执行它
Redis实现乐观锁_乐观锁_02
开启第二个终端执行修改money操作
Redis实现乐观锁_其他_03
那么此时执行终端一的事务就会失败
Redis实现乐观锁_数据_04
此时watch就充当了乐观锁的作用

解锁

使用命令unwatch key解除对某个key的观察
Redis实现乐观锁_数据_05