Rendimiento y monitorización
Redis persistente para colas, sesiones y Horizon
Redis Cache es una caché: empieza vacío cada vez que se reinicia y descarta claves cuando se llena. Sirve para guardar lo que la aplicación puede volver a calcular, no una cola de trabajos pendientes ni la sesión de un usuario. Para eso está el Redis persistente: una instancia propia de tu cuenta que guarda sus datos en disco y no los descarta al llenarse.
Es Valkey 8, compatible con Redis: funcionan los mismos comandos y los mismos clientes, como PhpRedis. Está disponible en los planes Avanza, Max y Elástico.
Redis Cache o Redis persistente
| Redis Cache | Redis persistente |
|---|---|
| En todos los planes | En Avanza, Max y Elástico |
| Para caché | Para colas, sesiones y Horizon |
| De 16 a 200 MB, según el plan | De 64 a 512 MB, a tu elección |
| Al reiniciarse, empieza vacío | Al reiniciarse, conserva sus datos |
| Al llenarse, descarta claves | Al llenarse, rechaza escrituras |
| Fuera de las copias | En las copias diarias |
Redis Cache se conecta por /tmp/redis.sock; el Redis persistente, por /home/USUARIO/.hostsuar/redis/redis.sock, con tu usuario de cPanel en lugar de USUARIO. La memoria de Redis Cache depende del plan; la del persistente la eliges tú, hasta 128 MB en Avanza, 256 MB en Max y 512 MB en Elástico.
Puedes usar los dos a la vez: la caché en Redis Cache y las colas y sesiones en el Redis persistente. Lo explicamos más abajo.
En los dos casos el puerto es 0: se conectan por socket, sin acceso por red. La aplicación tiene que ejecutarse en el propio hosting.
Activarlo
- En el área de clientes, abre Hosting, entra en tu servicio y ve a Gestor de paquetes.
- En la tarjeta Redis persistente, pulsa Activar.
- Revisa la memoria, la persistencia y qué hacer al llenarse. Los valores por defecto sirven para colas, sesiones y Horizon.
- Confirma y espera a que el panel lo muestre en marcha.
El Redis persistente ocupa uno de los procesos persistentes del plan y aparece también en Herramientas > Procesos. Cada cuenta tiene uno; si ya están ocupados todos los procesos de tu plan, borra uno antes de activarlo.
Corre con el usuario de tu cuenta y dentro de sus recursos. Solo ese usuario puede abrir el socket, así que no necesita contraseña.
Ajustes
Memoria. 64 MB por defecto, con un máximo de 128 MB en Avanza, 256 MB en Max y 512 MB en Elástico. Colas y sesiones ocupan poco: 64 MB alcanzan para la mayoría de aplicaciones. Con Horizon, la memoria crece con las métricas y los trabajos recientes que guarda; se ajustan en trim, dentro de config/horizon.php.
Persistencia.
- Cada segundo (por defecto): escribe cada cambio en un fichero de registro (AOF) y lo pasa a disco cada segundo. Ante un corte se pierde, como mucho, el último segundo. Es la que necesitan colas y sesiones.
- Sin persistencia: todo vive en memoria y un reinicio lo deja vacío. Úsala solo si guardas datos que puedes regenerar.
Lo que guarda en disco está en ~/.hostsuar/redis/datos y cuenta en el espacio de tu plan, también con el Redis parado. La tarjeta del Gestor de paquetes enseña cuánto ocupa, junto a la memoria. Colas y sesiones suelen quedarse en unos pocos megas: el fichero de registro se compacta solo cuando crece.
Al llenarse.
- No perder datos (por defecto): cuando llega al límite, rechaza las escrituras nuevas con un error y no borra nada. Es la opción para colas, sesiones y Horizon: la aplicación avisa del error en lugar de perder un trabajo sin que nadie lo sepa.
- Descartar lo menos usado: borra las claves que menos se usan para hacer sitio. Solo para caché; con colas o sesiones perderías trabajos y desconectarías usuarios.
Cambiar los ajustes reinicia el Redis. Con Cada segundo recupera sus datos al volver; si pasas a Sin persistencia, arranca vacío.
Acciones
- Ajustes: cambia memoria, persistencia y comportamiento al llenarse.
- Reiniciar: lo para y lo arranca. Con persistencia, conserva los datos.
- Vaciar: borra todo lo que contiene, en todas sus bases: trabajos pendientes de las colas, sesiones abiertas (los usuarios tendrán que volver a entrar) y métricas de Horizon. No se puede deshacer.
- Desactivar: lo para y lo retira, así que libera su plaza de proceso persistente. La aplicación perderá la conexión: cambia antes su
.env. Lo guardado se queda en tu cuenta por si lo vuelves a activar, salvo que marques Borrar también lo que tiene guardado.
Puedes comprobar que responde desde SSH, con tu usuario en lugar de USUARIO:
valkey-cli -s /home/USUARIO/.hostsuar/redis/redis.sock ping valkey-cli -s /home/USUARIO/.hostsuar/redis/redis.sock info memory
El primero responde PONG; el segundo muestra la memoria usada (used_memory_human) y el límite (maxmemory_human).
Conectarlo desde Laravel
Activa la extensión redis (PhpRedis) en la versión de PHP de la aplicación y, si tus workers usan otra versión, también en esa. Después, en el .env:
REDIS_CLIENT=phpredis REDIS_HOST=/home/USUARIO/.hostsuar/redis/redis.sock REDIS_PORT=0 REDIS_PASSWORD=null QUEUE_CONNECTION=redis SESSION_DRIVER=redis
Sustituye USUARIO por tu usuario de cPanel. Con Deploy+, edita el .env desde el menú del repositorio; si cacheas la configuración, vuelve a ejecutar php artisan config:cache o despliega de nuevo. Comprueba la conexión:
php artisan tinker --execute="dump(Illuminate\Support\Facades\Redis::connection()->ping());"
Debe mostrar true.
Antes de cambiar de conexión, ten en cuenta lo que ya existe:
- Colas: los trabajos que esperan en la base de datos no pasan a Redis. Deja que la cola de la base de datos se vacíe antes de cambiar
QUEUE_CONNECTION, o mantén un rato un worker sobre la conexióndatabase. - Sesiones: las sesiones guardadas en la base de datos no se trasladan. Al cambiar
SESSION_DRIVER, los usuarios tendrán que volver a iniciar sesión.
Para procesar las colas hace falta un worker en marcha: créalo en Herramientas > Procesos como Worker de colas o usa Horizon. Lo tienes en procesos persistentes.
Con Redis Cache a la vez
Si quieres la caché en Redis Cache y el resto en el Redis persistente, haz que la conexión cache de config/database.php lea sus propias variables. En la conexión cache, cambia el host y el puerto:
'host' => env('REDIS_CACHE_HOST', env('REDIS_HOST', '127.0.0.1')), 'port' => env('REDIS_CACHE_PORT', env('REDIS_PORT', '6379')),
Y en el .env:
REDIS_HOST=/home/USUARIO/.hostsuar/redis/redis.sock REDIS_PORT=0 REDIS_CACHE_HOST=/tmp/redis.sock REDIS_CACHE_PORT=0 CACHE_STORE=redis
El almacén redis de config/cache.php usa la conexión cache para los datos y la default para los bloqueos, así que los bloqueos de Cache::lock() y withoutOverlapping() quedan en el Redis persistente, que no los descarta.
Si solo tienes el Redis persistente, deja la caché en la base de datos o, si la pones en Redis, dale caducidad a lo que guardes: con No perder datos, una caché que crece sin caducar acaba llenando la memoria y bloqueando también las colas.
Horizon
Horizon necesita colas en Redis y un proceso que lo mantenga en marcha:
- Activa el Redis persistente y conecta Laravel como en el apartado anterior, con
QUEUE_CONNECTION=redis. - Instala Horizon en tu proyecto con
composer require laravel/horizonyphp artisan horizon:install. Necesita las extensionespcntlyposix: si Composer avisa de que faltan, actívalas en la versión de PHP que vas a usar. - Revisa
config/horizon.php. El supervisor deproductionadmite por defecto hasta 10 workers, y cada uno ocupa su memoria dentro de los recursos de tu cuenta: ajustamaxProcessesa lo que necesita tu aplicación, por ejemplo 2 o 3 en Avanza. - Decide quién puede ver el panel
/horizonen el métodogate()deapp/Providers/HorizonServiceProvider.php. Fuera del entorno local, solo entra quien autorices ahí. - En Herramientas > Procesos, añade un proceso de tipo Horizon con la carpeta de la aplicación y su versión de PHP. No crees además un worker de colas para las mismas colas.
- Añade
php artisan horizon:terminateal final del script de Deploy+, para que Horizon vuelva a arrancar con el código nuevo tras cada despliegue. - Si quieres las gráficas de métricas, programa
horizon:snapshotcada cinco minutos enroutes/console.php:
use Illuminate\Support\Facades\Schedule; Schedule::command('horizon:snapshot')->everyFiveMinutes();
Horizon con Redis Cache no es seguro: si esa caché se vacía o se llena, se pierden trabajos pendientes.
Copias de seguridad
Los datos viven en tu cuenta, en ~/.hostsuar/redis/, y entran en las copias de seguridad diarias como el resto de tus ficheros.
Restaurar esa carpeta devuelve el Redis al estado de ese día: los trabajos que estaban pendientes entonces volverían a la cola, aunque ya se hubieran procesado después. Si necesitas restaurarla, para antes el Redis persistente desde Herramientas > Procesos y arráncalo cuando termine la restauración.
También te puede ayudar
- Configurar Redis como caché de objetos Activa una instancia Redis para caché de objetos y conéctala por socket Unix desde WordPress, Presta...
- Integrar LiteSpeed Cache en Laravel Integra la caché del servidor LiteSpeed en Laravel mediante Composer y aplica el middleware del paqu...
- AccelerateWP: funciones, disponibilidad y configuración Detalla las funciones gratuitas y premium de AccelerateWP para WordPress, incluidas caché, optimizac...
- Cloudflare: configurar CDN, seguridad y DNS para tu web Explica cómo Cloudflare actúa entre visitantes y hosting para aportar CDN, caché, filtros y ahorro d...
¿Algo no cuadra o ha cambiado? Cuéntanoslo y lo revisamos.