Redis事务可以一次执行多个命令,并且带有以下特点:
- 批量操作:可以批量执行多个命令,提高服务器性能。
- 条件执行:事务支持带有条件的EXEC命令。如果条件不满足,事务中所有命令都不会执行。
- 取消错误命令:如果事务中的某个命令执行失败,那么只有那个失败的命令不会执行,其他的命令仍然执行。
- 原子性:事务中的所有命令要么全部被执行,要么全部都不执行。
事务的使用步骤如下:
- 使用 MULTI 命令开启一个事务:
MULTI
- 输入事务中的命令:
SET key1 "value1"
SET key2 "value2"
INCR counter
这些命令不会立即被执行,而是被放入队列中。
- 使用 EXEC 命令执行事务中的所有命令:
EXEC
如果事务队列中所有的命令都执行成功,EXEC 命令会返回一个事务回执列表。否则,事务会被放弃,EXEC 命令返回(nil) 。
- 使用 DISCARD 命令取消事务:
DISCARD
这会清空事务队列并取消事务。
- 条件EXEC:可以使用 WATCH key 命令监视一个或多个 key ,如果在事务执行之前这些 key 被其他命令所改动,那么事务将被放弃。
WATCH key1 key2 # 监视key1和key2
# 后续的命令( MULTI/SET...)会检查key1和key2是否被改动
# 如果被改动,EXEC命令会返回nil而事务不被执行
所以Redis事务可以一次执行多个相关命令,并具有原子性。使用事务可以简化客户端的逻辑,并且减少与服务器的交互次数。
事务是Redis实现较为高级的功能之一。熟练使用事务可以写出更加高效稳健的程序。理解Redis事务的原理与机制,是成为Redis高手必不可少的一点。