English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Redis パイプライン技術

Redisはクライアントベースの-サーバーモデルおよびリクエスト/応答プロトコルのTCPサービス。これは、通常、リクエストが以下の手順に従うことを意味します:

  • クライアントはサーバーにクエリリクエストを送信し、ソケットの返信を監視します。通常、ブロッキングモードで、サーバーの応答を待ちます。

  • サーバーはコマンドを処理し、結果をクライアントに返します。

Redis パイプライン技術

Redisパイプライン技術により、サーバーが応答しない場合でも、クライアントはサーバーにリクエストを続けて送信し、最終的には一括ですべてのサーバーの応答を読み取ることができます。

オンラインサンプル

redisパイプラインを確認するには、redis例を実行し以下のコマンドを入力します:

$(echo -en "PING\r\n SET w3codeboxkey redis\r\nGET w3codeboxkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
+PONG
+OK
redis
:1
:2
:3

以下の例では、以下を使用して PING redisサービスが利用可能か確認するコマンドを設定します。 その後、wを設定しました。3codeboxkeyの値がredisであれば、wを取得します。3codeboxkeyの値を増加させるために設定します。 3 次。

返却した結果では、これらのコマンドが一度にredisサービスに提出され、最終的には一括ですべてのサーバーの応答を読み取れることが分かります。

パイプライン技術の利点

パイプライン技術の最も顕著な利点は、redisサービスのパフォーマンスを向上させることです。

いくつかのテストデータ

以下のテストでは、パイプライン技術をサポートするRedisのRubyクライアントを使用して、パイプライン技術が速度向上にどのように寄与するかをテストします。

require 'rubygems' 
require 'redis'
def bench(descr) 
start = Time.now 
yield 
puts "#{descr} #{Time.now-start} 秒" 
end
def without_pipelining 
r = Redis.new 
10000回 
    r.ping 
} 
end
def with_pipelining 
r = Redis.new 
r.pipelined { 
    10000回 
        r.ping 
    } 
} 
end
bench("パイプラインなし") { 
    without_pipelining 
} 
bench("パイプラインあり") { 
    with_pipelining 
}

ローカルネットワーク内のMac OS Xシステム上で上記の簡単なスクリプトを実行したデータによると、パイプライン操作を開始すると、往復遅延が非常に低くなりました。

パイプラインなし 1.185238 秒 
パイプライン0.250783 秒

如你所见,パイプラインを開始すると、速度効率が向上しました5倍。