Redisのトランザクションは、一度、以下の3つの重要な保証で複数のコマンドを実行することができます。
- これは、EXECコマンドバッファキューを送信する前にバッチ操作に置かれています。
- トランザクションの実行を入力するにはEXECコマンドを受信した後、トランザクション任意のコマンドの実行が失敗し、コマンドの残りの部分はまだ実行されています。
- トランザクションの実行中に、クライアントから提出された他のコマンド要求は、トランザクションの実行コマンド・シーケンスに挿入されることはありません。
トランザクションを実行するには、最初から、次の三つの段階を通過します。
- トランザクションを開始します。
- チームへのコマンド。
- 執行部。
例
以下は、トランザクションの一例であり、それは最初にある MULTI トランザクションにチームに複数のコマンド、その後、トランザクションを開始し、最終的により EXEC 一緒にトランザクション内のすべてのコマンドで、トランザクションのコマンドをトリガします:
127.0.0.1:6379をRedisの> MULTI OKは Redisの "21日間でマスタリングC ++" 127.0.0.1:6379> SETブック名を QUEUED のRedis 127.0.0.1:6379> GET book- 名 QUEUEDは Redisの 127.0.0.1:6379を> SADDタグ」 C ++」 "プログラミング" "マスターシリーズ" QUEUED Redisの 127.0.0.1:6379は> タグSMEMBERS QUEUEDは Redisの > 127.0.0.1:6379 EXEC 1 )OK 21日にマスタリングC ++ "2)" 3)(整数)3 4)1) "マスタリングシリーズ" 2) "C ++" 3) "プログラミング"
Redisのは、単一のコマンドを実行する原子が、Redisのトランザクションにアトミック性を維持するための任意の機構を追加することなく、これRedisのトランザクションの実装はアトミックではありません。
トランザクションがパッケージボリュームとしてスクリプトを実行すると理解することができるが、命令の大部分はアトミック操作ではないが、中央が以前の命令のロールバック行う命令の故障につながらないであろう、それは後続の命令はしないだろう引き起こします。
这是官网上的说明取引にRedisのドキュメントから:
それは - Redisのは、コマンドの処理を停止しませんコマンドが失敗した場合でも、キュー内の他のすべてのコマンドが処理されることに注意することが大事。
例えば:
Redisの127.0.0.1:7000> マルチ OKは Redisの > 127.0.0.1:7000 AAA設定 QUEUEDは Redisの 127.0.0.1:7000> BBBセットB QUEUEDは Redisの > 127.0.0.1:7000をセットC CCC QUEUED Redisの 127.0.0.1:7000> EXEC 1 )OK 2 )OK 3)OK
それはロールバックされていませんでし成功を設定し、設定されたBのBBB場所、に失敗した場合、セットCは続行されます。
Redisのトランザクションコマンド
次の表は、Redisの問題のためのコマンド:
いいえ。 | コマンドと説明 |
---|---|
1 | DISCARDは トランザクションブロック内のすべてのコマンドをあきらめ、トランザクションを取り消します。 |
2 | EXECは、 トランザクションブロック内のすべてのコマンドを実行します。 |
3 | MULTIは、 ブロックトランザクションの開始をマーク。 |
4 | UNWATCHは、 すべてのキーを監視するために、WATCHコマンドをキャンセルします。 |
5 | WATCHキー[キー...] この(またはこれらの)他のオーダーへの重要な変更は、トランザクションの前に実行されている場合は、モニタの1つ(またはそれ以上)のキーは、そのトランザクションが中断されます。 |