Latest web development tutorials

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倍の効率をスピードアップ。