62

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

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

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

4

1 に答える 1

92

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

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

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

于 2015-03-30T02:08:52.393 に答える