Redisのパイプライン技術
サーバーのモデルと要求/応答プロトコルのTCPサービス - Redisのは、クライアントに基づいています。 これは、要求は、通常、次の手順を実行しますことを意味します。
- クライアントは通常、サーバの応答を待って、ブロックモードで、ソケットリターンをサーバにクエリを送信し、リッスンします。
- サーバ処理コマンドとクライアントに結果を返します。
Redisのパイプライン技術
Redisのパイプライン技術は、クライアントがサーバーの応答を読み取るように、一度にサーバに要求を送信し、最終的にはすべてを続けることができ、サーバーの時には対応できません。
例
ちょうどあなたがRedisのインスタンスを起動し、次のコマンドを入力する必要があり、Redisのパイプラインを参照してください。
$(echo -en "PING\r\n SET w3bigkey redis\r\nGET w3bigkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379 +PONG +OK redis :1 :2 :3
上記の例の我々PINGコマンドのRedisのサービスが提供されています使用することにより、我々はw3bigkey値のRedisを設定している、と我々は値w3bigkeyを取得し、訪問者の増加分を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 }
LANからMac OS Xシステムでは、上記のデータを実行するには、この簡単なスクリプトは、パイプライン動作を開くことを示し、往復遅延は極めて低い改善されました。
without pipelining 1.185238 seconds with pipelining 0.250783 seconds
あなたが見ることができるように、パイプラインを開き、我々は5倍の効率をスピードアップ。