Redis-トランザクション

2539 ワード

Redisトランザクション:
一連のコマンドを1つのキューで順次実行します.
トランザクションの3段階:
1.トランザクションの開始(MULTI)2.命令加入キュー(QUEUE)3.トランザクションの実行(EXEC)
例1:MULTI>QUEUE>EXEC(一般的にキュー内のすべてのコマンドを順次実行)
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 v1
QUEUED
127.0.0.1:6379> set k2 v2
QUEUED
127.0.0.1:6379> set k3 v3
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379>

例2:MULTI>QUEUE>DISCARD(キュー内のすべてのコマンドの実行をキャンセル)
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> set k5 v5
QUEUED
127.0.0.1:6379> set k6 v6
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379>

例3:MULTI>QUEUE>EXEC(QUEUEのコマンドにエラーがあり、すべてのコマンドが実行されない)
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> set k5
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379> set k6
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379>

例4:MULTI>QUEUE>EXEC(QUEUEのコマンド実行に失敗し、残りのコマンドは正常に実行)
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k4 v4
QUEUED
127.0.0.1:6379> incr k4
QUEUED
127.0.0.1:6379> set k5 v5
QUEUED
127.0.0.1:6379> set k6 v6
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) ERR value is not an integer or out of range
3) OK
4) OK
127.0.0.1:6379> keys *
1) "k6"
2) "k1"
3) "k2"
4) "k3"
5) "k4"
6) "k5"
127.0.0.1:6379>

例5:WATCH>MULTI>QUEUE>EXEC
1.トランザクション実行前にWATCHのキーが他のプロセスによって操作された場合、トランザクション実行は失敗します.
2.EXECの実行後、事務が成功するかどうかにかかわらず、WATCHは解除されます.
3.UNWATCHは手動でWATCHを解除できます. 1
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> watch k1
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> append k1 xyz
QUEUED
127.0.0.1:6379>
2
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> append k1 abc
(integer) 5
127.0.0.1:6379> get k1
"v1abc"
127.0.0.1:6379>
1
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379>