記事のディレクトリ
1:Redisの紹介
- Redisのトランザクションは、一度に複数のコマンドを実行することができ、以下の3つの重要な保証付き:
- バッチ運転伝送におけるEXECコマンドの前には、中に配置されたキューバッファ。
- トランザクションの実行を入力するにはEXECコマンドを受信した後、トランザクション任意のコマンドの実行が失敗し、コマンドの残りの部分はまだ実行されています。
- トランザクションの間に、他のクライアントから提出されたコマンド要求は、トランザクションの実行コマンド・シーケンスに挿入されることはありません。
Redisのは、キュー、使い捨て、シーケンシャル、排他的な一連のコマンドを実行することが可能
- トランザクションを実行するには、最初から、次の三つの段階を通過します。
- トランザクションを開始します事MULTIを開始します
- チームへのコマンド:トランザクションに、複数のコマンドへのチームは、これらの命令はすぐに実行されますが、トランザクション内で実行されるのを待っているキューに置かれることはありません受信します
- 執行部:EXECコマンドは、トランザクションによってトリガ
2:使用Redisの情勢
2.1 Redisのトランザクションコマンドを導入
使用MULTIコマンド入力Redisのトランザクションを。このコマンドは、常にOKを返します。この場合、ユーザは複数のコマンドを発行することができます。これらのコマンドは、むしろそれらを実行するよりも、キューに入れられますRedisの。すべてのコマンドはEXECを呼び出すときに実行しました。代わりに、コールはあきらめて取引を終了したトランザクションキューをフラッシュします。
いいえ。 | コマンドと説明 |
---|---|
1 | DISCARD:トランザクションブロック内のすべてのコマンドをあきらめ、取引をキャンセル |
2 | EXEC:トランザクションブロックコマンドの中にそれを実行します |
3 | MULTI:トランザクションブロックの始まりをマーク |
4 | UNWATCH:すべてのキーを監視するために、WATCHコマンドをキャンセル |
5 | WATCHキー[キー]:このキーの変更は、トランザクションの前に実行された場合は、1つ以上のキーを監視することは、そのトランザクションが中断されます |
2.2通常の実行
私たちは、イトゥリでは、多くの古い鉄の話をしなかった
通常の実行デモ:
2.3放棄総務
実証トランザクションを放棄:
2.4すべての罪悪感
すべてでも座るデモ
2.5不正ヘッド債権者
ヘッドの不正債権デモ
2.6すべての罪悪感や不公平頭差の債権者
(すべての罪悪感-ダイレクトプログラムは、Javaのように表示された場合10/0はあなたにエラーを指示する機会を与えるものではありませんコマンドは、すべてのキューに入れられたエラーである場合でも発生座る)
、それがスローされた場合、Java IOが例外をスローします-頭の不正の債権者を
2.7時計のモニター
- ペシミスティック・ロック/オプティミスティックロック/ CAS(チェックして、セット)の紹介
- ペシミスティック・ロック:それはロックを得たまで、名前が示すように、非常に悲観的である、彼女はデータを取ったたびにロックされますので、人々は、このデータを取りたいので、たびに他の人が変更になるという考えを、データを拾うがブロックされます。そのような行等ロック、テーブルロック、リードロック、ライトロック、このロック機構の多くを使用する伝統的なリレーショナルデータベース内部に先立って、第1のロック操作を行っています
- オプティミスティック・ロック:名前が示すように、あなたはバージョンを使用することができ、彼らは他の人が変更されないことがあるときに毎回データをピックアップし、非常に楽観的であるが、この時間の間、他の人がデータを更新するために行かなかったかを決定します更新時にロックされていません特許メカニズム。楽観的ロックは、スループットを向上させることができる読み取るためのアプリケーションの種類に適しています
楽観的ロック戦略:更新を実行するために、現在のレコードのバージョンよりも大きくなければなりませんバージョンを提出
モニターのデモを見る
初期のクレジットカード利用可能量との下や改ざんがないストッパー、第1のモニタをして、これらの金額は、同じトランザクション内で変化することを確実にするために、multlを回し、ガッサーが改ざん
1:初期のクレジットカード利用可能額とアンダーなしストッパーを改ざん
2:監視し、オープンmultl、これらの金額は、同じトランザクション内で変化することを確実にするためにする
3:サボタージュに従事し始めたと同時に、私たちはバランスの監視を行い、ストッパーが改ざん
4:今、バランスの値の表示、および元の状態に復元
- 概要
- キーの値は、他のエンドユーザーが変更されている場合ウォッチコマンド、同様の楽観的ロック、トランザクションのコミット、このようなリストは、別のクライアントpyshは、/あまりにもポップされており、全体のトランザクションキューは実行されません
- WATCH後に変更されたキーの任意の値がある場合は、トランザクションを実行する前に複数のキーWATCHコマンドを監視することによって、トランザクション.EXECコマンドの実行を捨て、発呼者に通知するために戻りNullmultiバルク(NIL)応答しますトランザクション失敗します
- 追加したら、EXEC / unwatchロックの監視の実施がキャンセルされる前に
3:Redisのトランザクション特性
- 分離独立したアクション:すべてのコマンドは、トランザクションが順次実行シリアライズされます。トランザクションの実行中に、コマンドが中断され、他のクライアントの要求に送信されません。
- 分離レベルの概念はありません:実際のコマンドキューは提出しなかった前に、トランザクションがどの命令が実際に実行されませんコミットする前に、クエリがトランザクション更新に見られるように、「物事に存在しないため、実行されません外交での問い合わせは、人々は頭痛が非常にある」を参照してくださいすることはできません
- アトミック性を保証するものではありません:Redisの同じトランザクションをコマンドは、後続のコマンドがまだ実行され、失敗があれば、何のロールバックはありません