Redis事务可以一次执行多个命令,并且带有以下两个重要的保证:
EXEC
命令前被放入队列缓存。EXEC
命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。一个事务从开始到执行会经历以下三个阶段:
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
命令用于执行所有事务块内的命令。
语法
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
命令用于标记一个事务块的开始。
事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由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
命令用于取消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
命令用于监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。
语法
127.0.0.1:6379> WATCH key [key ...]
返回值
总是返回OK
示例
127.0.0.1:6379> WATCH lock lock_times
OK