#まえがき
phpでredisを使う場合、今まではextexsionを使っていたんだけどlaravelだとpredisを採用しているので簡単に性能を比較してみました。
サンプルコードは以下の通り
sample.php
<?php
$end_loop = 50000;
$ext = new redis();
$ext->connect('localhost');
include 'vendor/predis/predis/autoload.php';
$predis = new Predis\Client('tcp://127.0.0.1:6379');
$ext->set('hogehoge','fugafuga');
echo '--- get ---' . PHP_EOL;
// redis extension 読み込み
$start = microtime(true);
for($i=0;$i<$end_loop;$i++){
$ext->get('hogehoge');
}
printf("phpredis %f\n",microtime(true) - $start);
// predis 読み込み
$start = microtime(true);
for($i=0;$i<$end_loop;$i++){
$predis->get('hogehoge');
}
printf("predis %f\n",microtime(true) - $start);
echo '--- set ---' . PHP_EOL;
// redis extension 書き込み
$start = microtime(true);
for($i=0;$i<$end_loop;$i++){
$ext->set('hogehoge',12345);
}
printf("phpredis %f\n",microtime(true) - $start);
// predis 書き込み
$start = microtime(true);
for($i=0;$i<$end_loop;$i++){
$predis->set('hogehoge',12345);
}
printf("predis %f\n",microtime(true) - $start);
今のところの想定ではgetとsetが大半なのでこの二種類で検証。
結果
php-5.6.30でやってみた。
--- get ---
phpredis 7.943276
predis 11.579012
--- set ---
phpredis 9.351953
predis 11.512340
extensionの方が速いですね。
php-7.0.13でもやってみた。違うPCなのでphpのバージョン間の性能差は参考にはなりません
--- get ---
phpredis 0.560895
predis 1.281387
--- set ---
phpredis 0.580832
predis 1.239677
やっぱりextensionの方が速いですね(倍以上でてる)。
まとめ
結論としてはextensionの方が高速でphp-7での性能差は顕著でした。とは言ってのphpの場合ライブラリの性能がネックになることはあまりなさそうなので使いやすい方でいいかと思います。