企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
上面我们讲述`Redis`中事务时,提到的常用命令还有一个`watch`命令,这个又是做什么用的呢?我们还是先来看一个例子。 首先打开一个客户端一,依次执行以下命令: ~~~java flushall //清空数据库 multi //开启事务 get name //获取 name,此时正常返回 nil set name lonely_wolf //设置 name get name //获取 name,此时正常应该返回 lonely_wolf ~~~ 得到如下效果图: ![](https://img.kancloud.cn/08/11/0811d4db28d6e3d219c34675a8887106_696x162.png) 这时候我们先不执行事务,打开另一个客户端二,来执行一个命令`set name zhangsan`: ![](https://img.kancloud.cn/c4/23/c423eb5b65d90e26e107a86795f9c025_506x79.png) 客户端二执行成功了,这时候再返回到客户端一执行`exec`命令: ![](https://img.kancloud.cn/9c/25/9c25147894343a69b0a158cbc4110d9f_784x263.png) 可以发现,第一句话返回了`zhangsan`。也就是说,`name`这个`key`值在入队之后到`exec`之前发生了变化,一旦发生这种情况,可能会引起很严重的问题,所以在关系型数据库可以通过锁来解决这种问题,那么`Redis`当中是如何解决的呢? 是的,在`Redis`当中就是通过`watch`命令来处理这种场景的。