Redis事务命令

Redis事务可以一次执行多个命令,并且带有以下两个重要的保证:

  • 批量操作在发送EXEC命令前被放入队列缓存。
  • 收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。

Redis Discard命令

Redis Discard命令用于取消事务,放弃执行事务块内的所有命令。

语法

127.0.0.1:6379> DISCARD

返回值

总是返回OK

示例

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> PING
QUEUED
127.0.0.1:6379> SET greeting "hello"
QUEUED
127.0.0.1:6379> DISCARD
OK

Redis Exec命令

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

语法

127.0.0.1:6379> EXEC

返回值

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

示例

# 事务被成功执行
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR user_id
QUEUED
127.0.0.1:6379> INCR user_id
QUEUED
127.0.0.1:6379> INCR user_id
QUEUED
127.0.0.1:6379> PING
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) PONG

# 监视 key ,且事务成功执行
127.0.0.1:6379> WATCH lock lock_times
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET lock "huangz"
QUEUED
127.0.0.1:6379> INCR lock_times
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (integer) 1

# 监视 key ,且事务被打断
127.0.0.1:6379> WATCH lock lock_times
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET lock "joe"
QUEUED
127.0.0.1:6379> INCR lock_times
QUEUED
127.0.0.1:6379> EXEC
(nil)

Redis Multi命令

Redis Multi命令用于标记一个事务块的开始。

事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由EXEC命令原子性(atomic)地执行。

语法

127.0.0.1:6379> MULTI

返回值

总是返回OK

示例

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> INCR user_id
QUEUED
127.0.0.1:6379> INCR user_id
QUEUED
127.0.0.1:6379> INCR user_id
QUEUED
127.0.0.1:6379> PING
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) PONG

Redis Unwatch命令

Redis Unwatch命令用于取消WATCH命令对所有key的监视。

语法

127.0.0.1:6379> UNWATCH

返回值

总是返回OK

示例

127.0.0.1:6379> WATCH lock lock_times
OK
127.0.0.1:6379> UNWATCH
OK

Redis Watch命令

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

语法

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

返回值

总是返回OK

示例

127.0.0.1:6379> WATCH lock lock_times
OK

results matching ""

    No results matching ""