嗨客网搜索
Redis-cli命令
Redis事务watch命令

Redis事务watch命令教程

Redis 事务 的 watch 命令用于监视一个(或多个) key ,如果在 事务 执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

注意,watch 命令不能在事务执行中使用,只能在事务执行之前使用,同时,如果我们使用 watch 监视多个 key 时,只要一个 key 被修改,那么事务就会执行失败。

Redis watch命令详解

语法

192.168.98.70:6379> WATCH key [key ...]

参数

参数 描述
key 要监视的键。

返回值

总是返回 OK。

时间复杂度

O(1)

可用版本

>= 2.2.0

案例

watch不能在事务中用

如果在事务中使用 watch,则会报错

127.0.0.1:6379> multi OK 127.0.0.1:6379> set name "haicoder" QUEUED 127.0.0.1:6379> WATCH name (error) ERR WATCH inside MULTI is not allowed 127.0.0.1:6379>

首先,我们使用 multi 命令开始了一个事务,记着,我们使用 set 命令,将 Key 为 name 的值设置为了 “haicoder”,接着,我们使用 watch 监视键 name,此时报错,因为 WATCH 命令只能在事务之外使用。

watch监视一个key

使用 watch 命令监视一个 redis 的 key

127.0.0.1:6379> set name "HaiCoder" OK 127.0.0.1:6379> watch name OK 127.0.0.1:6379> set name "haicoder" OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> set course "python" QUEUED 127.0.0.1:6379> exec (nil) 127.0.0.1:6379> get name "haicoder" 127.0.0.1:6379> get course (nil)

首先,我们使用 set 命令,设置了 name 的值为 “HaiCoder”,接着,我们使用 watch 命令监视 name 的值,并再次使用 set 命令将 name 的值设置为 “haicoder”。

接着,我们使用 multi 命令开始了一个事务,并且在事务里,我们使用 set 命令设置了 course 的值为 “python”,最后使用 exec 命令执行事务,此时 exec 命令返回了 nil,即事务执行失败。

最后,我们使用 get 命令,获取了 name 的值和 course 的值,我们发现 course 的值为 nil,即事务没有执行成功,因此,我们可以使用 watch 在事务开始之前监视一个 key,如果 key 被修改了,那么事务就会执行不成功。

watch监视多个key

使用 watch 命令监视多个 key 时,只要一个 key 被修改,则事务执行失败

127.0.0.1:6379> set name "haicoder" OK 127.0.0.1:6379> set age 109 OK 127.0.0.1:6379> watch name age OK 127.0.0.1:6379> set age 119 OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> set course "python" QUEUED 127.0.0.1:6379> exec (nil) 127.0.0.1:6379> get course (nil)

首先,我们使用 set 命令,设置了 name 的值为 “HaiCoder” 和 age 的值为 109,接着,我们使用 watch 命令同时监视了 name 的值和 age 的值,并再次使用 set 命令将 age 的值设置为 119。

接着,我们使用 multi 命令开始了一个事务,并且在事务里,我们使用 set 命令设置了 course 的值为 “python”,最后使用 exec 命令执行事务,此时 exec 命令返回了 nil,即事务执行失败。

最后,我们使用 get 命令,获取了 course 的值,我们发现 course 的值为 nil,即事务没有执行成功,因此,使用 watch 命令监视多个 key 时,只要一个 key 被修改,则事务执行失败。

Redis事务watch命令总结

Redis 事务的 watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

注意,watch 命令不能在事务执行中使用,只能在事务执行之前使用,同时,如果我们使用 watch 监视多个 key 时,只要一个 key 被修改,那么事务就会执行失败。

嗨客网顶部