ホームページ  >  記事  >  データベース  >  Redis 学習: Redis トランザクションの概要

Redis 学習: Redis トランザクションの概要

coldplay.xixi
coldplay.xixi転載
2021-03-09 09:39:592055ブラウズ

Redis 学習: Redis トランザクションの概要

概要

複数のコマンドを一度に実行できます。これは本質的にはコマンドのセットです。トランザクション内のすべてのコマンドは、他のコマンドによって 挿入されることなくシリアル化され、シリアル化されて実行され、ブロックは許可されません。
複数の redis コマンドを一度に実行します。

できること

キュー内の一連のコマンドを、順番に排他的に一度に実行します。

プレイ方法

MULTI コマンドは、redis トランザクションを開くために使用されます。このコマンドは常に OK と応答します (成功するかどうかはわかります。), 現時点では、ユーザーは を 1 つずつ実行する代わりに、複数のコマンドを一度に実行できます。 redis はそれらをキューに入れ、すべてのコマンドは EXEC コマンドによって呼び出されます。
DISCARD はバッチ操作を中止します

#推奨 (無料): redis チュートリアル

一般的なコマンド

##コマンド#DISCARDトランザクションをキャンセルし、トランザクション ブロック内のすべてのコマンドの実行を放棄します。 。 EXECトランザクション ブロック内のすべてのコマンドを実行します。 MULTIトランザクション ブロックの開始をマークします。 WATCH コマンドですべてのキーの監視を解除します。 1 つ (または複数) のキーを監視します。トランザクションが実行される前に、この (またはこれらの) キーが他のコマンドによって変更された場合、その後、トランザクションは中断されます。
説明
#UNWATCH
WATCH key [key …]

ケース

通常実行

Redis 学習: Redis トランザクションの概要

##トランザクション破棄

Redis 学習: Redis トランザクションの概要 連続で

Redis 学習: Redis トランザクションの概要#間違い、連続で実行なし
##敵債権者

この問題について、redis のトランザクション サポートを理解する方法

Redis はトランザクションを部分的にサポートしており、この部分では、正しいトランザクションは実行され、間違ったトランザクションは実行されません。 Redis 学習: Redis トランザクションの概要

case:watch モニタリング

悲観的ロック/楽観的ロック/CAS (チェックと設定)

悲観的ロック (悲観ロック) は、その名の通り非常に悲観的で、データを取りに行くたびに他人が変更するのではないかと思い、データを取得するたびにロックをかけてしまいます。他の人がデータを取得したい場合、ロックを取得するまでブロックされます。このようなロック メカニズムの多くは、行ロック、テーブル ロック、読み取りロック、書き込みロックなど、従来のリレーショナル データベースで使用されており、操作前にすべてロックされます。

テーブル ロック: テーブル全体をロックします。ただし、このテーブルには多くのデータが含まれる可能性があり、この時点ではプロセスに大規模な変更を加える必要があり、キューに入れられるスレッドがますます増えます。 行ロック: 各レコードをロックする オプティミスティック ロック

オプティミスティック ロックは、名前が示すように非常に楽観的で、データを取得するたびに、他の人はそのデータを変更しないだろうと考えます。 , なのでロックはかかりませんが、更新する際にこの期間内に他の人がデータを更新したかどうかを判断し、バージョン番号などの仕組みを使うことができます。オプティミスティック ロックはマルチ読み取りアプリケーション タイプに適しており、スループットを向上させることができます。
楽観的ロック戦略: 更新を実行するには、送信されたバージョンがレコードの現在のバージョンよりも大きい必要があります
楽観的ロックは盲目的に楽観的ではありません。たとえば、Zhang San は WeChat アカウントを変更し、Li は自分の WeChat アカウントを変更しました。 Si は同時に QQ アカウントを変更しました。そのときのバージョン番号はすべて 1 でした。その後、Zhang San が WeChat アカウントを変更して送信しました。このとき、バージョン番号は 1 から 2 に変更されました。Li Si も送信しました。このとき、1から3に変更され、例外が報告されましたので、再起動してください。
楽観的ロックは通常仕事で使用されます


クレジット カードの利用可能残高と負債を初期化します

Redis 学習: Redis トランザクションの概要改ざんはありません。最初に監視してからマルチを有効にして、2 つの金額変更が同じトランザクション内にあることを確認します。

監視中に、別のトランザクションが共有データを変更したことが判明しました。トランザクションの実行が失敗する原因になります

Redis 学習: Redis トランザクションの概要
データを変更する前に、監視をロックする必要があります。ロックしないとエラーが発生します。誰かが私のデータを変更した場合は、例外を報告します。
Redis 学習: Redis トランザクションの概要
改ざんあり

キーは監視されており、キーが改ざんされると以降のトランザクションの実行が無効になります

unwatch

watch コマンドによるすべてのキーの監視を解除します exec を実行すると、実行前に付加されていた監視ロックが解除されます


概要

Watch 命令はオプティミスティック ロックに似ています。トランザクションが送信されるときに、Key の値が別のクライアントによって変更された場合 (たとえば、リストが別のクライアントによってプッシュ/ポップされた場合)、トランザクション全体がキューは実行されません。 WATCH コマンドによるトランザクション実行前に複数のキーが監視されます。WATCH 後にキーの値が変更された場合、EXEC コマンドによって実行されたトランザクションは放棄され、Nullmulti-bulk 応答が返されます。トランザクションの実行が失敗したことを呼び出し元に通知するために返されます。


3 フェーズ

• オープン: MULTI でトランザクションを開始します。 • エンキュー: 複数のコマンドをキューに入れます。これらのコマンドは受信しても実行されませんが、実行を待機するトランザクション キューに置かれます

• 実行: EXEC コマンドによってトリガーされるトランザクション



3 機能

個別分離操作: トランザクション内のすべてのコマンドはシリアル化され、順番に実行されます。トランザクションの実行中、他のクライアントから送信されたコマンド要求によって中断されることはありません。 分離レベルの概念はありません。キュー内のコマンドは、トランザクションが送信されるまで実際には実行されません。トランザクションが送信される前に実際に実行される命令はないため、トランザクション内に「確認するためのクエリ」は存在しません。トランザクション" トランザクション外でクエリを実行すると、redis 内の更新が表示されません。これは非常に厄介な問題です。

アトミック性は保証されていません。同じ redis トランザクション内でコマンドの実行が失敗しても、後続のコマンドは引き続き実行されます。 Roll

は AI
の従来の ACID に従いません。

以上がRedis 学習: Redis トランザクションの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。