predis VS phpRedis
3964 ワード
predisとphpRedisはphp接続redisで最もよく使われる2つのパケットである.作業項目では、redisに非常に依存するため、predisとphpRedisの両方のパフォーマンスの違いを比較します.
前に書くテストに使用するコードアドレス-github 試験環境1.redis: Redis server v=2.9.11 2.php: PHP 7.1.29(cli)(PHPRedis拡張をインストールする必要がある)3.機械情報:Mac i 5 8 Gメモリ スタンドアロンテスト
それぞれ5 W回のredis書き込みコマンドを順番に実行し,それらの時間(ms)を比較した.一定の差はあるが,差は大きくない.
回数
predis
phpRedis
5w
3000
2999
5w
3000
3000
10w
6000
6000
10w
5001
5999
50w
34999
33001
50w
32000
28999
同時テスト
APIを書き、一定量keyを読み書きし、時間を統計する.ab同時テストを用いて,両者の違いを比較した.
合計回数
コンカレント数
読み書き数
predis
phpRedis
コメント
1000
100
2000
333968
309012
redis変カード、大量の待ち時間があるかもしれません
5000
100
200
203008
201993
redis変カード、大量の待ち時間があるかもしれません
5000
50
200
234967
177043
格差が広がる
5000
100
20
25002
14007
格差は拡大し続け、phpredisが接続を確立するのが速い可能性があると推測されている.
5000
100
20
20996
13003
同上
5000
100
2
7000
4999
5000
100
2
10002
4999
5000
100
1
10996
2001
基本的な決定は、接続の確立にかかる時間の差です.
5000
100
1
7999
2001
多重接続
phpRedisはpredisよりもう一つ、phpredisがpconnect()を実現した点です.pconnectはredisが終了した後、空きタイムアウトが自動的に切断されるまでredis接続を破棄しません.pconnectはphp-fpmプロセスに依存し,プロセスが死なないとconnectが存在する.
合計回数
コンカレント数
読み書き数
predis
phpRedis
phpRedisPconn
コメント
5000
100
200
70982
64999
62002
上記時間と実行回数が異なるので3つを比較すればよい
5000
50
200
62985
42004
52021
このシナリオではconnectがより速く~
5000
50
200
74992
52001
54997
もう一度テストした
5000
100
20
8997
7007
9997
おかしいな~
5000
100
20
10999
7997
11995
5000
100
2
5996
4004
4996
5000
100
2
5000
4998
2000
5000
100
1
5000
4999
1999
5000
100
1
4001
2999
3997
5000
100
1
7001
4996
2001
fpm破棄に関連しているかどうかを推測し、同時合計回数を増やします(ミリ秒を計算するたびに小数点数5桁を変更します).
15000
100
1
11995
5997
5007
差はありますが、差は大きくありません.
15000
100
1
11995
8005
7000
テストでは、高同時性の場合、pconnectがより効果的になる可能性がありますが、同時性が低い場合はconnectがより速くなります.また,pconnect接続数はfpm数に関連付けられる.
参考記事:PHPを高くして要求Redis異常処理phpredisのconnectとpconnect史上最もLOWのPHP接続プールソリューション手動でリソースを解放してphp redis pconnectに深く入り込んでください
前に書く
それぞれ5 W回のredis書き込みコマンドを順番に実行し,それらの時間(ms)を比較した.一定の差はあるが,差は大きくない.
回数
predis
phpRedis
5w
3000
2999
5w
3000
3000
10w
6000
6000
10w
5001
5999
50w
34999
33001
50w
32000
28999
同時テスト
APIを書き、一定量keyを読み書きし、時間を統計する.ab同時テストを用いて,両者の違いを比較した.
合計回数
コンカレント数
読み書き数
predis
phpRedis
コメント
1000
100
2000
333968
309012
redis変カード、大量の待ち時間があるかもしれません
5000
100
200
203008
201993
redis変カード、大量の待ち時間があるかもしれません
5000
50
200
234967
177043
格差が広がる
5000
100
20
25002
14007
格差は拡大し続け、phpredisが接続を確立するのが速い可能性があると推測されている.
5000
100
20
20996
13003
同上
5000
100
2
7000
4999
5000
100
2
10002
4999
5000
100
1
10996
2001
基本的な決定は、接続の確立にかかる時間の差です.
5000
100
1
7999
2001
//
$t = rand(0,1);
if ($t == 0) {
$this->testRedis(new phpRedisConn());
}else{
$this->testRedis(new PredisConn());
}
//
private function testRedis(conn $conn)
{
$mode = $conn->getMode();
$startTime = Comm::getMillisecond();
Comm::PrintEcho("string ..." . " :" . $startTime . " :" . $mode);
for ($i = 0; $i < self::NUM; $i++)
{
$conn->set($conn->getMode(), $i);
}
$endTime = Comm::getMillisecond();
$useTime = $endTime - $startTime;
$conn->incrby("useTime_" . $mode, $useTime);
Comm::PrintEcho("string ..." . " :" . $useTime . " :" . $mode);
}
多重接続
phpRedisはpredisよりもう一つ、phpredisがpconnect()を実現した点です.pconnectはredisが終了した後、空きタイムアウトが自動的に切断されるまでredis接続を破棄しません.pconnectはphp-fpmプロセスに依存し,プロセスが死なないとconnectが存在する.
/*
* $host redis IP $port redis
* $timeout ( redis )
* $persistent_id
*/
public function pconnect( $host, $port = 6379, $timeout = 0.0, $persistent_id = null )
//
$t = rand(0,2);
if ($t == 0) {
$this->testRedis(new phpRedisConn());
}elseif ($t == 1)
{
$this->testRedis(new PredisConn());
}elseif ($t == 2)
{
$this->testRedis(new phpRedisPconn());
}
合計回数
コンカレント数
読み書き数
predis
phpRedis
phpRedisPconn
コメント
5000
100
200
70982
64999
62002
上記時間と実行回数が異なるので3つを比較すればよい
5000
50
200
62985
42004
52021
このシナリオではconnectがより速く~
5000
50
200
74992
52001
54997
もう一度テストした
5000
100
20
8997
7007
9997
おかしいな~
5000
100
20
10999
7997
11995
5000
100
2
5996
4004
4996
5000
100
2
5000
4998
2000
5000
100
1
5000
4999
1999
5000
100
1
4001
2999
3997
5000
100
1
7001
4996
2001
fpm破棄に関連しているかどうかを推測し、同時合計回数を増やします(ミリ秒を計算するたびに小数点数5桁を変更します).
15000
100
1
11995
5997
5007
差はありますが、差は大きくありません.
15000
100
1
11995
8005
7000
テストでは、高同時性の場合、pconnectがより効果的になる可能性がありますが、同時性が低い場合はconnectがより速くなります.また,pconnect接続数はfpm数に関連付けられる.
参考記事:PHPを高くして要求Redis異常処理phpredisのconnectとpconnect史上最もLOWのPHP接続プールソリューション手動でリソースを解放してphp redis pconnectに深く入り込んでください