04_Redisパイプ

1424 ワード

redisはcsモードのtcp serverであり、httpと同様の要求応答プロトコルを使用する.一つのclientは一つのsocket接続を介して複数の要求コマンドを開始することができる.各要求コマンドが発行された後、clientは通常ブロックされ、redisサービス処理を待っています.redis処理が完了したら、コマンドを要求すると、その結果は応答文を通じてclientに返されます.基本的な通信手順は以下の通りです.
redis 127.0.0.1:6379> INCR i
(integer) 1
redis 127.0.0.1:6379> INCR i
(integer) 2
redis 127.0.0.1:6379> INCR i
(integer) 3
redis 127.0.0.1:6379> INCR i
(integer) 4
 基本的に4つの命令は8つのtcp新聞が必要です.通信はネットワーク遅延がありますので、clientとserverの間のパケット転送時間は0.25秒かかります.上の4つの命令8つの新聞は少なくとも1秒で完成できます.これは、たとえredisが毎秒100個のコマンドを処理しても、私たちのclientは一秒に四個の命令を出すしかないです.これはredisの処理能力を十分に利用していないことを示している.mget、msetなどの単一命令で複数のkeyのコマンドを処理できるほか、複数のコマンドをpipelineでclientから複数のコマンドを一緒に包装して送ることもできます.単一コマンドの応答を待つ必要はなく、複数のコマンドを処理した後、複数のコマンドの処理結果をクライアントに持ち帰ります.通信プロセスは以下の通りです.
redis 127.0.0.1:6379> INCR i
redis 127.0.0.1:6379> INCR i
redis 127.0.0.1:6379> INCR i
redis 127.0.0.1:6379> INCR i
(integer) 1
(integer) 2
(integer) 3
(integer) 4
 
tcp記事が長すぎて分割されないと仮定する.二つのtcp新聞は4つのコマンドを完成できるかもしれません.clientは4つのincrコマンドを一つのtcp新聞にまとめて送ることができます.serverは4つのコマンドの処理結果を一つのtcp新聞に戻すことができます.pipeline方式で大量の操作がある場合.私たちはネットで遅延した時間をたくさん節約できます.コマンドをpipelineでパッケージして送信することに注意してください.redisはすべてのコマンドを処理する前に、すべてのコマンドの処理結果をキャッシュしなければなりません.パッケージ化のコマンドが多いほど、キャッシュの消費メモリも多くなります.包装の命令が多ければ多いほどいいというわけではないです.具体的にどのぐらいの適性がありますか?具体的な状況によってテストします.
まとめ:パイプラインとは、クライアントの一連のネーミングをパッケージ化し、サーバー側で一度に実行し、複数回のTCP相互作用を避けることです.