# 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](https://redis.io/docs/management/optimization/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](https://github.com/phpredis/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](https://github.com/phpredis/phpredis/blob/develop/INSTALL.md) 

En mi caso que uso intensivamente [Homebrew](https://brew.sh/) es sencillo en el caso de usar [Laravel Herd - Extensiones adicionales](https://herd.laravel.com/docs/1/advanced-usage/additional-extensions)

```bash
pecl install redis
```

Si tienes más de una versión (Laravel Herd o similar) y deseas instalarlo en otras versiones
```bash
/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

#### Laravel 12

Solo pomnga la de phpredis que es la que uso pro eficacia y que cambio en Laravel 12 [Unix Socket Connections](https://laravel.com/docs/12.x/redis#unix-socket-connections)
```
REDIS_CLIENT=phpredis
REDIS_SCHEME=unix
REDIS_PASSWORD=null
REDIS_HOST=/home/USER/.redis/redis.sock # Configuracion redis socket en Directadmin
REDIS_PORT=0
```


#### Old laravel
```
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_PORT=null # is deprecated in php 8.3
REDIS_PASSWORD=null 
REDIS_PATH=null
```

#### Predis

```
REDIS_CLIENT=predis
REDIS_SCHEME=unix
REDIS_PASSWORD=null
#REDIS_PORT=null # is deprecated in php 8.3
REDIS_PATH=/tmp/redis.sock
```


## Prueba de concepto

```bash
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](https://castris.com)

Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/store/soporte-profesional).