Различия библиотек predis и phpredis для PHP

Для работы с Redis в PHP существует множество библиотек. Рассмотрим самые известные из них: phpredis/phpredis и predis/predis, также известную как nrk/predis.

Phpredis это полноценное расширение (extension) для PHP написанное на языке C. На данный момент эта библиотека набрала на гитхабе 6 425 звёзд и 1 667 форков. Последнее обновление 25 апреля 2018. Так как это нативное расширение, оно должно работать быстрее и потреблять меньше памяти, что критично для highload-проектов.

Predis это библиотека написанная на PHP,  для её установки не нужны root-права на сервере. Она менее популярна, всего 4 659 звёзд и 721 форков на гитхабе. Последнее обновление от 12 июля 2017. Эта библиотека не даст наивысшей производительности, однако для проектов на современных фреймворках типа Laravel или Symfony это будет не критично.

Установка PhpRedis в CentOs 7 для PHP 7.2

Расширение сложнее установить, но оно даёт большую производительность для приложений, которые активно используют Redis.

yum install php-redis -y

Не забудьте перезагрузить PHP-FPM сервис, иначе модуль не будет загружен!

Либо, вы можете установить расширение для PHP PhpRedis через PECL.

pear channel-discover pecl.php.net
pear update-channels 
pear install pecl.php.net/redis

Либо можно скачать уже скомпилированную библиотеку: https://pecl.php.net/package/redis и вручную добавить в конфиг php:

extension=php_redis.dll

Установка Predis в PHP

Чтобы начать использовать Redis, необходимо установить пакет predis/predis с помощью Composer:

composer require predis/predis

Что делать, если вы поехавший симфонист?

Для любителей Symfony и прочих извращений рекомендуется ставить сразу обе библиотеки + дополнительный бандл SncRedisBundle известный также как RedisBundle.

Как подключить Redis в Symfony через DI

$container->autowire(Redis::class, Redis::class)
    ->addMethodCall('pconnect', [$container->getParameter('redis_host'), $container->getParameter('redis_port') ])
    ->addMethodCall('setOption', [Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE])
    ->addMethodCall('setOption', [Redis::OPT_SCAN, Redis::SCAN_NORETRY]);