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的观察