まず、Redis トランザクションの本質を簡単に紹介します。
Redis トランザクションの本質は一連のコマンドです。トランザクションは一度に複数のコマンドの実行をサポートしており、トランザクション内のすべてのコマンドはシリアル化されます。トランザクション実行処理中、キュー内のコマンドは順番に実行され、他のクライアントから送信されたコマンド要求はトランザクション実行コマンドシーケンスに挿入されません。
概要: Redis トランザクションは、キュー内の一連のコマンドを 1 回限り、順次、排他的に実行します。
Redis トランザクションには分離レベルの概念がありません:
バッチ操作は、EXEC コマンドを送信する前にキュー キャッシュに入れられ、実際には実行されないため、トランザクション内にクエリはありません。トランザクション内の更新は、トランザクション外のクエリでは確認できません。
Redis はアトミック性を保証しません:
Redis では、単一のコマンドはアトミックに実行されますが、トランザクションはアトミック性を保証せず、ロールバックはありません。トランザクション内のいずれかのコマンドが実行に失敗した場合でも、残りのコマンドは引き続き実行されます。
Redis トランザクションの 3 つの段階:
トランザクション コマンドを開始し、トランザクションを実行するキューを作成します
Redis トランザクション関連コマンド:
watch key1 key2...: 1 つ以上のキーを監視します。トランザクションが実行される前に監視対象のキーが他のコマンドによって変更された場合、トランザクションは中断されます (楽観的ロックと同様)
# multi: トランザクション ブロックの開始をマークします (キューに入れられます) exec: すべてのトランザクションブロックのコマンドを実行します (exec が実行されると、以前に追加された監視ロックが解除されます) discard: トランザクションをキャンセルし、トランザクションブロック内のすべてのコマンドを破棄しますUnwatch: すべてのキーのウォッチ監視をキャンセルしますRedis トランザクションの使用例:(1)通常の実行 ( 2) トランザクションを破棄する (学習ビデオ共有:
redis ビデオ チュートリアル )
(3) コマンドがある場合トランザクションキュー内で性的エラー(Javaのコンパイルエラーと同様)が発生した場合、EXECコマンド実行時にすべてのコマンドが実行されません (4) 構文エラーがある場合トランザクション キュー内では (Java の 1/0 ランタイム例外と同様)、EXEC コマンドを実行すると、他の正しいコマンドが実行され、間違ったコマンドは例外をスローします。 (5) ウォッチを使用するケース 1: ウォッチを使用して残高を検出し、取引中に残高データが変化せず、取引が実行される成功しました ケース 2: ウォッチを使用して残高を検出します。トランザクションを開いた後 (1 とマーク)、新しいウィンドウで 2 とマークされた操作を実行し、残高の値を変更します。トランザクション実行中に他のクライアントをシミュレートします。ウォッチによって監視されているデータを変更してから、1 とマークされたコマンドを実行します。EXEC を実行した後、トランザクションは正常に実行されませんでした。 EXEC を実行してトランザクションの実行を開始すると、トランザクションが正常に実行されたかどうかに関係なく、WARCH による変数の監視はキャンセルされます。 したがって、トランザクションの実行が失敗した場合は、WATCH コマンドを再実行して変数を監視し、新しいトランザクションを開始して操作する必要があります。 概要: ウォッチ命令はオプティミスティックロックに似ており、トランザクションがコミットされたときに、ウォッチが監視している複数の KEY のうちいずれかの KEY の値が他のクライアントによって変更されている場合、 EXEC を使用してトランザクションを実行すると、トランザクション キューは実行されず、トランザクションの実行が失敗したことを呼び出し元に通知するために Nullmulti-bulk 応答が返されます。 関連する推奨事項:以上がRedis トランザクションのユースケースの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。