Capítulo 5 de 5

Instalar Redis en Debian 13 y conectarlo a Laravel 13

verificado el 7 septiembre 2026 · 4 min

Respuesta rápida

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

bash
sudo apt update
sudo apt install -y redis-server php-redis

Dos paquetes, dos papeles: redis-server es el servidor y php-redis la extensión que permite a PHP hablar con él. Comprueba los dos:

bash
redis-server --version
redis-cli ping
php -r 'echo extension_loaded("redis") ? phpversion("redis") : "absente", PHP_EOL;'
code
Redis server v=8.0.2 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64
PONG
6.2.0

PONG confirma que el servicio está en marcha y responde. Actívalo en el arranque:

bash
sudo systemctl enable --now redis-server
sudo systemctl status redis-server

Asegurarlo 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.

bash
sudo nano /etc/redis/redis.conf
/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_aleatoire
bash
sudo systemctl restart redis-server

Si 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:

.env
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
CACHE_DRIVER y QUEUE_DRIVER ya no existen

Es 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:

bash
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"));
'
code
client  : phpredis
cache   : redis
queue   : redis
session : redis

Comprobar que funciona de verdad

Un ajuste aceptado no es un ajuste que funcione. Escribe un valor y vuelve a leerlo:

bash
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 ».

code
Cache::get   : valeur
Redis::ping  : 1
version      : 8.0.2
Por qué tus claves parecen ilocalizables

Un 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:

bash
redis-cli -n 1 --scan
code
laravel-database-laravel-cache-gk_test

El 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 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:

bash
composer require predis/predis
.env
REDIS_CLIENT=predis

Procesar las colas de trabajos

Cambiar QUEUE_CONNECTION a Redis no basta: hace falta un proceso que consuma las tareas.

bash
php artisan queue:work redis --tries=3

Los 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:

bash
php artisan queue:restart

Errores frecuentes

CACHE_DRIVER y QUEUE_DRIVER ya no existen Renombrados CACHE_STORE (Laravel 11) y QUEUE_CONNECTION (Laravel 5.7). Una clave desconocida no emite ningún error: la aplicación sigue sin más con su driver por defecto.
Buscar las claves en la base 0 Laravel escribe la caché en la base 1. Usa redis-cli -n 1 --scan.
Olvidar los dos prefijos La clave lleva el prefijo de conexión y el de la caché: laravel-database-laravel-cache-…
Instalar predis por inercia Desde Laravel 11 el cliente por defecto es phpredis, una extensión C más rápida. predis solo se justifica cuando no tienes acceso root.
Redis expuesto sin contraseña Mantén 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_CONNECTION=redis sin proceso que las trate Las tareas se acumulan sin ejecutarse nunca mientras no haya un queue:work en marcha.
Newsletter

Las nuevas pruebas, tutoriales y proyectos, por correo.

Pruebas reproducibles, código versionado, resultados fechados. Nunca spam.