🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
`watch`命令可以为`Redis`事务提供`CAS`乐观锁行为,它可以在`exec`命令执行之前,监视任意`key`值的变化,也就是说当多个线程更新同一个`key`值的时候,会跟原值做比较,一旦发现它被修改过,则拒绝执行命令,并且会返回`nil`给客户端。 下面还是让我们通过一个示例来演示一下。 打开一个客户端一,依次执行如下命令: ~~~java flushall //清空数据库 watch name //监视 name multi //开启事务 set name lonely_wolf //设置 name set age 18 // 设置 age get name //获取 name get age //获取 age ~~~ 执行之后得到如下效果图: ![](https://img.kancloud.cn/d0/b3/d0b3ce42a1b28ae0074435a42441c52a_819x263.png) 这时候再打开一个客户端二,执行`set name zhangsan`命令: ![](https://img.kancloud.cn/c4/23/c423eb5b65d90e26e107a86795f9c025_506x79.png) 然后再回到客户端一执行`exec`命令。这时候会发现直接返回了`nil`,也就是事务中所有的命令都没有被执行(即:只要检测到一个`key`值被修改过,那么整个事务都不会被执行):![](https://img.kancloud.cn/6c/f4/6cf4185220aafbd7a6f2f9c8a7d5d04f_779x304.png)