Redis事务exec命令

Redis事务exec命令教程

Redis 事务 的 exec 命令用于执行所有事务块内的命令。

假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort)。

Redis exec命令详解

语法

192.168.98.70:6379> exec

返回值

事务块内所有命令的返回值,按命令执行的先后顺序排列。当操作被打断时,返回空值 nil 。

时间复杂度

事务块内所有命令的时间复杂度的总和。

可用版本

>= 1.2.0

案例

exec执行事务

使用 exec 命令执行一个 redis 事务

127.0.0.1:6379> multi OK 127.0.0.1:6379> incr id QUEUED 127.0.0.1:6379> incr id QUEUED 127.0.0.1:6379> incr id QUEUED 127.0.0.1:6379> incr id QUEUED 127.0.0.1:6379> exec 1) (integer) 1 2) (integer) 2 3) (integer) 3 4) (integer) 4 127.0.0.1:6379>

首先,我们使用 multi 命令开始了一个事务,我们看到,此时命令行返回了 OK。接着,我们执行了四次 incy 命令,将 id 的值增加了 4,最后使用 exec 命令执行事务。

我们看到,执行完 exec 命令之后,命令行输出了四次结果,即,我们之前执行的四次 incy 命令被放在事务中顺序的执行了。

exec命令被watch打断

在使用 watch 监视 key 时,如果 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 被修改了,那么事务就会执行不成功。

Redis事务exec命令总结

Redis 事务的 exec 命令用于执行所有事务块内的命令。

假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些) key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort)。