05. Redisの情勢

Redisの総務

Redisのサポートサービス操作。アトミック持つアトミックトランザクションは、操作が失敗する成功するか、すべてのいずれかで実行されたトランザクションに含まれています。しかし、Redisのロールバックはサポートされていませんが、テスト開発部門での誤動作を回避することができます。サポートの半分原子は、背後にある理由を見ていると言うことができます。
何度も我々は、トランザクション操作する必要があります。
翻訳ファイル:https://redis.io/topics/transactions
実践:Pythonのバージョンリファレンス
https://github.com/7Edge/redis-demo/blob/master/redis_pipeline.py

業務

MULTI、EXEC、破棄しWATCH操作は、基礎となるオペレーティング・Redisの情勢です。これらの操作は、アトミック操作の実行などの一連の操作を可能にします。理由はどのような二つの重要な保護措置、やることができました:

1.コマンド命じ

トランザクション内のすべてのコマンドは秩序ある、と実行は実行順序です。別のクライアント接続エラーが発生した場合、現在実行中のトランザクションに影響を与える可能性はありません。これは、コマンドの実行が動作して隔離されていることを保証します。それはシングルスレッド、およびredisserverの使用I / Oの多重化プロセスの同時接続されているため。

2.常に原子

トランザクションのいずれかで、全体のコマンドの実行、またはコマンドを実行していないで、Redisのトランザクションはアトミックです。EXECコマンドは、複数のコマンドを呼び出す前に、サーバー側の接続にクライアントが切断されていない場合は、何もアクションは実行されません、ために、すべての実行されたトランザクションを回す; EXECコマンドが実行されている場合、すべての操作が実行されます追加のみの構成ならばファイルを使用して、Redisのは作るシングルライト(2)システムコール AOFファイルに書き込まれます。Redisのサーバーがクラッシュするかは、管理者を殺すことを余儀なくされた場合は、操作の一部だけが登録されている場合があり、この場合には、再起動し、この場合は、開始と終了に失敗したことがわかりますRedisのは、エラーを報告しました。その後、我々はすべきRedisの-チェックAOFツールを使用して、このツールは、AOFファイルを修復トランザクションの一部のみを削除し、Redisの缶を再起動します。

トランザクションを使用して開きます。

1. 执行MULTI  # 开启事务, 返回OK或者其它
2. 执行多个命令  # 事务中的操作, 返回QUEUED,表明加入事务命令队列
3. EXEC  # 执行,返回每个事务中命令的返回结果列表

4. DISCARD 如果在EMULTI之后EXEC之前要关闭事务,再EXEC之前执行即可flush所有事务命令队列中的命令并关闭事务

Redisのトランザクションエラーが発生します

トランザクションでは、いくつかの操作が発生する可能性があるか、実行エラーは、コマンド実行エラーは基本的に2つのものがあります。

前間違っ1. EXEC

EXECコマンドの前にミスがあり、そのコマンドが正常にキューに追加されません。以下のような:な間違ったコマンド名を使用するなどのパラメータのコマンド数が誤っています。

コマンドの実行中に成功したリターンが他のリターンが間違っている参加する命令をQUEUED場合、実際には、コマンドキューに追加されているため、このエラーのため、クライアントは、知覚できます。このエラーは、ほとんどのクライアントが自動的にトランザクションを中断し、業務を破棄します。(PythonはRedisのモジュールによるパイプラインと組み合わせるマルチ/ EXEC、redis.exceptions.ResponseErrorが異常にあったが、異常なコマンドが依然として実行する必要はないであろう、それはパイプラインの組み合わせによるものである)
しかし、Redisの2.6.5の後、サーバが記録しますコマンドキューに累積誤差コマンドは、その後、実行EXECは、サーバがトランザクションを実行することを拒否し、エラーを返し、自動的に破棄します。

このエラーのため、サーバーの動作のみが正常に実行されるRedis2.6.5はコマンドキューに追加する前にエラーが発生したにも関わらずしかし、コマンドセットのサブセットの同等は、一度実行されます。Redisの2.6.5サーバは、このロジックに対処しませんが、ロジックは、新しいコマンドをコマンドパイプラインパイプラインをで追加され、行動の前にパイプラインを実現することができ、パイプラインは、コマンドを返された結果のリストを返します。

エラー2. EXEC後

実行エラーの後にEXEC、キーの競合など。このエラーのため、この方法は、他のすべてのコマンドが実行される処理しない場合でも、トランザクション中に新しいコマンドエラー。

なぜ間違っているのロールバックをサポートしていませんか?

リレーショナルデータベースと同じように、トランザクションがサポートをロールバックされ、さ​​らにはRedisの情勢の間違いのためにサポートされています。それは二つのものであるため、そのような行動がある理由Redisの理由:

  1. Redisのコマンドの構文エラーや障害が唯一の誤ったデータ型に変更キーで存在するであろう。これらのエラーは、開発やテスト段階で見つけるのは非常に簡単です。
  2. これは、シンプルかつ高速である必要がありますRedisの、あなたは能力をロールバックする必要はありません。

Redisの会社が唯一のキューに参加するためのコマンドを実行するための唯一の原子指し、Redisのトランザクションは、コマンドの実行時にロールバックエラーをサポートしていません。

チェックインとセットのためのRedisの楽観的ロック

Redisの単離のスレッドを読んで、時には私たちは、この楽観的ロック、のみ提供楽観的ロックのRedisを使って我々のデータをロックするために、データをロックするために排他的に使用する必要があるため、並行トランザクションは、トランザクションが、同じデータの時間を変更する必要があります変更がある場合にのみ、トランザクションを使用して、トランザクション実行EXECの時に動作を確認し、それがバックEXECが失敗した実行します。WATCHはRedisの情勢のためのCASの振る舞いを提供するために使用されます。CASで、私たちはしばしば楽観的ロックを言います。

オプティミスティック・ロックのトランザクションが失敗し、あなたが結果をテストする必要があり、失敗は再びしようとするだろう。

私たちは、トランザクションACIDの4つの特性を知っています:

Atomic原子性: 事务中操作集,要么都成功,要么都失败回滚。
Redis事务所指的原子性仅仅只针对将命令加入执行队列的过程,Redis事务不支持在命令执行过程中的错误回滚。

Consistency 一致性: 事务前后,数据库是从一个一致性状态到另一个一致性状态。如转账前后总数是一致的。

Isolation 隔离性: 并发事务时,事务之间都不会由于访问同一数据而被干扰。在这个隔离层面讲,就有多种隔离级别,因为隔离级别时影响并发事务效率和数据安全性的,要在效率和安全间平衡是关键。隔离级别太严格,并发效率低,数据安全;隔离级别太低,又怕数据不安全。

Durability 持久性:事务一旦被提交,改变时永久的,即要持久化。很多都会将事务操作完后追加到操作日志文件中,数据者写入磁盘文件系统持久化。

WATCHコマンドは、トランザクションが失敗したことを示す、変更が実行EXECの前に発生した場合、モニターは、そのトランザクションがアボートし、ヌルを返したときに、キー、キーの変更を監視するために使用されます。取引前に、使用可能なデータをロックします。WATCH MULTIおよびEXEC付き

すべて見てキーを洗い流すことができUNWATCHを使用してください。

概要

  1. Redisの原子企業が唯一のコマンドのみ実行キューに追加プロセスを指し、Redisのトランザクションは、コマンドの実行時にロールバックエラーをサポートしていません。
  2. データは楽観的ロックを使用して見ることができます。他の人のためにというように悲観的楽観CAS、。

おすすめ

転載: www.cnblogs.com/ZJiQi/p/11550964.html