プロトコルと往復遅延時間¶Redisは、典型的なTCPを使ったクライアント/サーバモデルです。リクエスト/レスポンスプロトコルと呼ばれます。いくつかのステップでリクエストが成り立っています。クライントは、クエリーを送る。ソケットを読む、普段はブロックすること無しに、サーバからのレスポンスサーバープロセスは、コマンドを受け取りそしてサーバにレスポンスを返しますインスタンスは、4つのコマンドシーケンスを送ると以下のように動作します。4クライアントとサーバはネットワーク越しに接続されます。ループバックの高速な接続でもインターネットを介した低速なネットワークでもどちらでもOKです。ネットワークのレイテンシとは、クライアントがパケットを送信してからサーバまでに届き、そして、サーバが応答してからクライアントに到達するまでの時間のことです。往復遅延時間)と呼ばれます。この値は、パフォーマンスに多大な影響を及ぼします。RTTが250msかかる場合(この例はインターネット経由でのとても遅いパターンです)は、秒間100kリクエストが可能なサーバーでも秒間4リクエストが上限となります。127.0.0.1)しかしもし大量に書き込みたい場合は、これほど早くは有りません。幸いなことに、これらを改善する方法があります。パイプライニング¶リクエスト/レスポンスサーバーは、クライアントが過去のレスポンスを読み取る前にあtらしいリクエストを処理できる状態にあります。このやり方では、複数のコマンドをサーバーの応答を待たずに一括で送信しその後ひとつづつ受信処理を行ないます。これをパイプライニング(pipelining)パイプライニングと呼ばれ数十年前から利用されています。多くのPOP3プロトコル実装ではサーバから新しいメールをダウンロードするプロセスを大幅にスピードアップさせる為、この機能をサポートしています。Redisでは、早い段階からパイプライニングをサポートしています(多分もちろんあなたがご使用のバージョンでも)あなたもパイプライニングが利用できます。以下の例では、netcatユーティリティーになります。6379+PONG+PONG+PONG今回は、RTTのコストを払っていません。一度に3つのコマンドを発行しています。次の例はとてもわかりやすいパイプライニングの例です。4Importantパイプライニングを使用してクライアントからコマンドが送信されるとサーバは応答に強制的にメモリー使ったキューを利用します。超大量ののコマンドを送った場合は、それ相応(10kのコマンドを送ったとして約4倍)のメモリーが必要になります。各種クライアントを用いたベンチマークサンプルです。パイプライニングをサポートしています。ベンチマークでは、パイプライニングの有り無しで計測を行っています。OSX10.6.4)上でRedis-Server2.0.2,Python2.6.1上で計測されたものです。ネットワークはループバックインターフェース経由で接続されているのでRTTはプリティーLowです。0.197869062424ご覧のとおり、パイプラインを使用したほうが4倍以上高速化されています。その他マルチコマンド¶シングルパスで複数のオペレーションを行ないたい場合に使える便利コマンドは特に用意されていません。コマンドを発行する必要があります。コマンドを使用した時と同じだけのグッドパフォーマンスを期待できます。redisは大量のコマンドを受け取ることになります。