我们都知道 redis 的 分布式锁是一个悲观锁,提供了很好的并发解决方案;但更好的方式是使用watch命令来监控一个值是否变化,如果值发生改变,exec执行的命令将会返回null,故watch 命令是一个乐观锁的解决方案;
127.0.0.1:6379> set s3 ooo
OK
127.0.0.1:6379> watch s3
OK
127.0.0.1:6379> set s3 555 # 修改了变量 数量减库 -1
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set s3 222 这就不能改了
QUEUED
127.0.0.1:6379> exec 报错了
(nil)
127.0.0.1:6379> get s3
"555"
Redis 不可以在 multi 和 exec 之间执行 watch 指令,必须在 multi 之前执行,否则报错;
unwacth 命令是撤销对一个变量的监控;