Redis 事務可以一次執(zhí)行多個命令, 并且?guī)в幸韵聝蓚€重要的保證:

  • 事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執(zhí)行。事務在執(zhí)行的過程中,不會被其他客戶端發(fā)送來的命令請求所打斷。

  • 事務是一個原子操作:事務中的命令要么全部被執(zhí)行,要么全部都不執(zhí)行。

一個事務從開始到執(zhí)行會經(jīng)歷以下三個階段:

  • 開始事務。

  • 命令入隊。

  • 執(zhí)行事務。


實例

以下是一個事務的例子, 它先以 MULTI 開始一個事務, 然后將多個命令入隊到事務中, 最后由 EXEC 命令觸發(fā)事務, 一并執(zhí)行事務中的所有命令:

redis 127.0.0.1:6379> MULTI
OK

redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED

redis 127.0.0.1:6379> GET book-name
QUEUED

redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED

redis 127.0.0.1:6379> SMEMBERS tag
QUEUED

redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "C++"
   3) "Programming"

Redis 事務命令

下表列出了 redis 事務的相關(guān)命令:

序號命令及描述
1DISCARD
取消事務,放棄執(zhí)行事務塊內(nèi)的所有命令。
2EXEC
執(zhí)行所有事務塊內(nèi)的命令。
3MULTI
標記一個事務塊的開始。
4UNWATCH
取消 WATCH 命令對所有 key 的監(jiān)視。
5WATCH key [key ...]
監(jiān)視一個(或多個) key ,如果在事務執(zhí)行之前這個(或這些) key 被其他命令所改動,那么事務將被打斷。