Skip to main content

Phpredis en Laravel 10/11

Introducción

Siempre he preferido en sistema el uso de sockets por que hay numerosa literatura y benchmarks, además de estar indicado pro Redis - Benchmarks

Cuando los programas de referencia del servidor y del cliente se ejecutan en el mismo equipo, se pueden utilizar tanto el loopback TCP/IP como los sockets de dominio Unix. Dependiendo de la plataforma, los sockets de dominio Unix pueden alcanzar alrededor de un 50% más de rendimiento que el loopback TCP/IP (en Linux, por ejemplo). El comportamiento predeterminado de redis-benchmark es utilizar el bucle invertido TCP/IP.

Pero esto no esta bien documentado en Laravel desde hace tiempo. Por eso mucha gente instala predis/predis en lugar de PhpRedis. Si le añadimos el proceso de instalación de este último que en Mac Os se puede torcer un poco, y los primeros errores la gente abandona. Y la verdad es que tanto los sockets como PhpRedis, con más rápidos.

Instalación en Macos M1/M2

Te recomiendo la lectura de PhpRedis - Instalación

En mi caso que uso intensivamente Homebrew es sencillo en el caso de usar Laravel Herd - Extensiones adicionales

pecl install redis

Si tienes más de una versión (Laravel Herd o similar) y deseas instalarlo en otras versiones

/opt/homebrew/Cellar/php@8.2/8.2.17/bin/pecl install redis

Después es añadirlo (activarlo) en el php.ini de la versión. Abajo te dejo un ejemplo de un php.ini con varias extensiones y formatos para añadirlas.

;extension=/opt/homebrew/Cellar/php@8.2/8.2.16_1/pecl/20220829/mongodb.so
extension=/opt/homebrew/lib/php/pecl/20220829/pcov.so
extension=/opt/homebrew/lib/php/pecl/20220829/redis.so

Adaptar la configuración de Laravel

La otra cuestión es el como decirle a Laravel use el socket ya que la configuración y el mecanismo es distinto en PhpRedis que en Predis

Con Predis Laravel usa el path y con PhpRedis usa el host para decirle el socket. Asi que lo mejor es usar la varaibale REDIS_HOST

Phpredis

REDIS_SCHEME=unix
REDIS_CLIENT=phpredis
# Redis host must be set to the path of the Redis socket and phpredis
REDIS_HOST=/tmp/redis.sock
REDIS_PASSWORD=null
REDIS_PORT=null
REDIS_PATH=null

Predis

REDIS_CLIENT=predis
REDIS_SCHEME=unix
REDIS_PASSWORD=null
REDIS_PORT=null
REDIS_PATH=/tmp/redis.sock

Prueba de concepto

php artisan cache:clear

Si no te falla, es que ya estas usando tu Redis via PhpRedis

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.