Очередь данных на redis с помощью php-resque идет медленно
Я использую php-resque для постановки своей работы в очередь. И я делаю apache ab tool для оценки своей производительности.
php-resque
хорошо работает, но работает медленно, так как каждый раз, когда он подключается к redis, что влияет на производительность (без подключения он обрабатывает ~130 Requests/sec
и с Resque::enqueue
его ~30 requests/sec
).
Поэтому я думал передать данные в другой файл через exec
который соединит redis и queus задание в фоновом режиме, но обнаружил, что exec
это очень медленно.
Что дальше? Как я могу заставить его справиться с очередями Redis быстрее.
Примечание. Я использую эту команду для проверки производительности.
ab -n 1000 -c 10 "http://localhost/index.php"
1 ответ
Я нашел путь.
Вот шаги:
После копания php-resque
Я обнаружил, что он использует fsockopen, что делает его медленным.
Затем я установил php-redis
на моей машине убунту. Выполнив следующую команду.
sudo apt-get install php5-redis
Затем перезапустил сервер Apache:
sudo service apache2 restart
А затем связаны с Redis с помощью следующих строк кода.
<?php
$redis = new Redis();
$result = $redis->connect('127.0.0.1');
$id = md5(uniqid('', true));
$redis->set("resque:job:$id",$args);
$redis->close();
unset($redis);
После этого тестирование кода дало лучшую производительность (~70 requests/second)
что вдвое больше, чем раньше.
Примечание: здесь pconnect
обозначает постоянное соединение, которое быстрее, чем connect
,
Надеюсь, это кому-нибудь поможет.