Redisパイプ
2202 ワード
パイプは、クライアントが古い応答を読み取っていない場合でも、新しい要求を処理できるように、要求/応答サーバを実装することができる.これにより、応答を待つことなく、複数のコマンドをサーバに送信することができ、最後のステップで応答を読み取ることができます.これをフローラインと呼びます.
pipelineは複数のredis命令を一緒に出すだけで、redisはこれらの指定された実行が原子であることを保証していない.Multiはredisのtransactionに相当し,操作全体の原子性を保証し,途中エラーによる最終的なデータの不一致を避ける.テストによりpipeline方式の実行効率は他の方式より10倍程度高く,multi書き込みを有効にするとオンにしないよりも遅くなることが分かった.
ループバックインタフェースが遅くなる理由:
システム内のプロセスは常に実行されるわけではなく、実際にはそのプロセスを実行させるカーネルスケジューラであるため、例えば、ベンチマークテストの実行を許可し、Redisサーバから返信(最後に実行されたコマンドに関連)を読み出し、新しいコマンドを書き込むことが起こります.このコマンドは、ループバックインタフェースバッファに存在しますが、カーネルは、サーバによって読み込まれるために、システム呼び出しで現在ブロックされているサーバプロセスの実行をスケジュールする必要があります.従って、実際には、カーネルスケジューラの動作原理のため、ループバックインタフェースは依然としてネットワークのような遅延に関連している.
pipeline運転原理
pipelineは複数のredis命令を一緒に出すだけで、redisはこれらの指定された実行が原子であることを保証していない.Multiはredisのtransactionに相当し,操作全体の原子性を保証し,途中エラーによる最終的なデータの不一致を避ける.テストによりpipeline方式の実行効率は他の方式より10倍程度高く,multi書き込みを有効にするとオンにしないよりも遅くなることが分かった.
$redis = new Redis(); // redis
$redis->connect('127.0.0.1'); // redis
// ,
$redis->pipeline();
//
for ($i=0;$i<100000;$i++)
{
$redis->set("test_{$i}",pow($i,2));
$redis->get("test_{$i}");
}
$redis->exec(); //
$redis->close(); // redis
ループバックインタフェースが遅くなる理由:
システム内のプロセスは常に実行されるわけではなく、実際にはそのプロセスを実行させるカーネルスケジューラであるため、例えば、ベンチマークテストの実行を許可し、Redisサーバから返信(最後に実行されたコマンドに関連)を読み出し、新しいコマンドを書き込むことが起こります.このコマンドは、ループバックインタフェースバッファに存在しますが、カーネルは、サーバによって読み込まれるために、システム呼び出しで現在ブロックされているサーバプロセスの実行をスケジュールする必要があります.従って、実際には、カーネルスケジューラの動作原理のため、ループバックインタフェースは依然としてネットワークのような遅延に関連している.
pipeline運転原理