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.
No Comments