Redis パイプライン テクノロジー
Redis は、クライアント/サーバー モデルと要求/応答プロトコルに基づく TCP サービスです。これは、通常、リクエストは次の手順に従うことを意味します:
クライアントはクエリリクエストをサーバーに送信し、通常はブロッキングモードでソケットの戻りをリッスンし、サーバーの応答を待ちます。
サーバーはコマンドを処理し、結果をクライアントに返します。
Redis パイプライン テクノロジー
Redis パイプライン テクノロジーを使用すると、サーバーが応答しない場合でも、クライアントはサーバーにリクエストを送信し続け、最終的にはすべてのサーバーからの応答を一度に読み取ることができます。
インスタンス
Redis パイプラインを表示するには、redis インスタンスを開始して次のコマンドを入力するだけです:
$(echo -en "PING\r\n SET w3ckey redis\r\nGET w3ckey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379 +PONG +OK redis :1 :2 :3
上記の例では、PING コマンドを使用して、redis サービスが利用可能かどうかを確認します。 その後、w3ckey の値を redis に設定し、w3ckey の値を取得して訪問者を 3 回増加させます。
返された結果では、これらのコマンドが一度に Redis サービスに送信され、最終的にすべてのサーバーの応答を一度に読み取っていることがわかります
パイプライン テクノロジーの利点
パイプライン テクノロジーの最も重要な利点は、これにより、Redis サービスのパフォーマンスの効率が向上します。
いくつかのテストデータ
次のテストでは、パイプライン技術の機能をサポートする Redis の Ruby クライアントを使用して、パイプライン技術の速度向上効果をテストします。
require 'rubygems' require 'redis' def bench(descr) start = Time.now yield puts "#{descr} #{Time.now-start} seconds" end def without_pipelining r = Redis.new 10000.times { r.ping } end def with_pipelining r = Redis.new r.pipelined { 10000.times { r.ping } } end bench("without pipelining") { without_pipelining } bench("with pipelining") { with_pipelining }
Mac OS 上で上記の簡単なスクリプトを実行したデータ
without pipelining 1.185238 seconds with pipelining 0.250783 seconds
ご覧のとおり、パイプラインをオープンした後、速度効率が 5 倍向上しました。