Instalar Redis en Debian 13 y conectarlo a Laravel 13
verificado el 7 septiembre 2026 · 4 min
Instala redis-server y la extensión php-redis, y después rellena en el .env: REDIS_CLIENT=phpredis, CACHE_STORE=redis, SESSION_DRIVER=redis y QUEUE_CONNECTION=redis. Ojo, CACHE_DRIVER y QUEUE_DRIVER ya no existen: una clave desconocida se ignora sin error y la aplicación se queda con su driver por defecto.
Redis hace de caché, de almacén de sesiones y de cola de trabajos para una aplicación Laravel. Debian 13 trae Redis 8, y Laravel 13 se conecta a él por defecto con la extensión phpredis, más rápida que la biblioteca PHP predis que se recomendó durante años.
Este capítulo prolonga la instalación de Laravel en un servidor Debian, dentro del itinerario Desarrollo web. Instalación e integración verificadas en Debian 13 «trixie» con Laravel 13.30.1, el 2 de septiembre de 2026.
Instalar Redis y la extensión de PHP
sudo apt update
sudo apt install -y redis-server php-redisDos paquetes, dos papeles: redis-server es el servidor y php-redis la extensión que permite a PHP hablar con él. Comprueba los dos:
redis-server --version
redis-cli ping
php -r 'echo extension_loaded("redis") ? phpversion("redis") : "absente", PHP_EOL;'Redis server v=8.0.2 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64
PONG
6.2.0PONG confirma que el servicio está en marcha y responde. Actívalo en el arranque:
sudo systemctl enable --now redis-server
sudo systemctl status redis-serverAsegurarlo antes de seguir
Un Redis expuesto sin contraseña en una interfaz pública lo puede leer y modificar cualquiera. Es un incidente clásico, y la configuración por defecto de Debian ya protege lo esencial, pero compruébala.
sudo nano /etc/redis/redis.conf# escuchar solo en el loopback
bind 127.0.0.1 -::1
# rechazar las conexiones no autenticadas que vengan de fuera
protected-mode yes
# contraseña, imprescindible en cuanto Redis deja de estar en la misma máquina
requirepass un_mot_de_passe_long_et_aleatoiresudo systemctl restart redis-serverSi la aplicación y Redis están en la misma máquina, mantén bind 127.0.0.1: es la configuración más segura, y la contraseña pasa a ser una segunda barrera en lugar de la única.
Configurar Laravel
Las claves del archivo .env han cambiado de nombre con las versiones. Estas son las de Laravel 13, tal como aparecen en el archivo generado durante la instalación:
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redisEs el error más frecuente en este tema, y además es silencioso: una clave desconocida en el .env no provoca ningún error, la aplicación sigue usando sin más su driver por defecto. QUEUE_DRIVER pasó a llamarse QUEUE_CONNECTION ya en Laravel 5.7, y CACHE_DRIVER se convirtió en CACHE_STORE en Laravel 11.
Recarga la configuración y comprueba lo que la aplicación usa de verdad. Ojo, la caché de configuración congela esos valores:
php artisan config:clear
php artisan tinker --execute='
printf("client : %s\n", config("database.redis.client"));
printf("cache : %s\n", config("cache.default"));
printf("queue : %s\n", config("queue.default"));
printf("session : %s\n", config("session.driver"));
'client : phpredis
cache : redis
queue : redis
session : redisComprobar que funciona de verdad
Un ajuste aceptado no es un ajuste que funcione. Escribe un valor y vuelve a leerlo:
php artisan tinker --execute='
Cache::put("gk_test", "valeur", 60);
printf("Cache::get : %s\n", Cache::get("gk_test"));
printf("Redis::ping : %s\n", Illuminate\Support\Facades\Redis::ping());
printf("version : %s\n", Illuminate\Support\Facades\Redis::info()["redis_version"]);
'Aquí hace falta el nombre completo de la fachada: una vez instalada la extensión phpredis, Redis designa la clase de la extensión, Laravel ya no registra su alias, y un simple Redis::ping() falla con « Non-static method Redis::ping() cannot be called statically ».
Cache::get : valeur
Redis::ping : 1
version : 8.0.2Un redis-cli --scan sobre la base 0 no devuelve nada, y de ahí se concluye que la caché no funciona. En realidad, Laravel escribe la caché en la base 1 y encadena dos prefijos. La clave del ejemplo anterior queda guardada con este nombre exacto:
redis-cli -n 1 --scanlaravel-database-laravel-cache-gk_testEl primer prefijo viene de database.redis.options.prefix y el segundo de cache.prefix. La base 1 la fija database.redis.cache.database, lo que aísla la caché de las colas y de las sesiones.
phpredis o predis
phpredis | predis | |
|---|---|---|
| Naturaleza | extensión C | biblioteca PHP |
| Instalación | apt install php-redis | composer require predis/predis |
| Por defecto en Laravel 13 | sí | no |
| Acceso root al servidor | necesario | no necesario |
Elige phpredis en cuanto administres la máquina: el tratamiento del protocolo se hace en C. predis sigue siendo útil en un alojamiento compartido donde no puedes instalar extensiones. En ese caso:
composer require predis/predisREDIS_CLIENT=predisProcesar las colas de trabajos
Cambiar QUEUE_CONNECTION a Redis no basta: hace falta un proceso que consuma las tareas.
php artisan queue:work redis --tries=3Los registros de esos procesos están en storage/logs, la ruta que devuelve storage_path() entre las rutas de la aplicación. En producción, ese proceso debe estar supervisado para reiniciarse tras una caída o un despliegue. Supervisor es la herramienta habitual, pero una unidad systemd también sirve. Acuérdate de reiniciar los procesos después de cada despliegue, si no, siguen ejecutando el código antiguo que tienen cargado en memoria:
php artisan queue:restartErrores frecuentes
redis-cli -n 1 --scan.bind 127.0.0.1 cuando la aplicación está en la misma máquina, y añade requirepass en cuanto deje de estarlo.queue:work en marcha.