web-dev-qa-db-ja.com

redisでのパイプライン処理とトランザクション

Redisでトランザクションを使用すると、基本的にトランザクション内のすべてのコマンドがパイプライン処理されます。 EXECが起動すると、すべてのコマンドが一緒に実行されるため、複数のコマンドの原子性が常に維持されます。

これはパイプライン処理と同じではありませんか?

パイプラインとトランザクションはどのように違いますか?また、Redisの単一スレッドの性質では十分ではないのはなぜですか?パイプライン/トランザクションが明示的に必要なのはなぜですか?

40
Manas Saxena

パイプライン処理は、主にネットワークの最適化です。これは本質的に、クライアントが大量のコマンドをバッファリングし、一度にサーバーに送信することを意味します。コマンドは、トランザクションで実行されることが保証されていません。ここでの利点は、すべてのコマンドのネットワーク往復時間を節約できることです。

Redisはシングルスレッドであるため、individualコマンドは常にアトミックですが、たとえば、異なるクライアントからの2つの指定されたコマンドは、交互に実行できます。

ただし、Multi/execは、multi/execシーケンスのコマンドの間に他のクライアントがコマンドを実行していないことを保証します。

56
The Real Bill