Instalar o Redis no Debian 13 e ligá-lo ao Laravel 13
verificado a 7 Setembro 2026 · 4 min
Instala o redis-server e a extensão php-redis e depois preenche no .env: REDIS_CLIENT=phpredis, CACHE_STORE=redis, SESSION_DRIVER=redis e QUEUE_CONNECTION=redis. Atenção, CACHE_DRIVER e QUEUE_DRIVER já não existem: uma chave desconhecida é ignorada sem erro e a aplicação mantém o driver por omissão.
O Redis serve de cache, de armazém de sessões e de fila de espera para uma aplicação Laravel. O Debian 13 traz o Redis 8, e o Laravel 13 liga-se-lhe por omissão com a extensão phpredis, mais rápida do que a biblioteca PHP predis recomendada durante muito tempo.
Este capítulo prolonga a instalação do Laravel num servidor Debian, no percurso Desenvolvimento web. Instalação e integração verificadas em Debian 13 «trixie» com o Laravel 13.30.1, a 2 de setembro de 2026.
Instalar o Redis e a extensão PHP
sudo apt update
sudo apt install -y redis-server php-redisDois pacotes, dois papéis: o redis-server é o servidor, o php-redis é a extensão que permite ao PHP falar com ele. Verifica os dois:
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.0O PONG confirma que o serviço está a correr e responde. Ativa-o no arranque:
sudo systemctl enable --now redis-server
sudo systemctl status redis-serverProteger antes de ir mais longe
Um Redis exposto sem palavra-passe numa interface pública é legível e modificável por qualquer pessoa. É um incidente clássico, e a configuração por omissão do Debian já protege o essencial, mas confirma-a.
sudo nano /etc/redis/redis.conf# escutar apenas no loopback
bind 127.0.0.1 -::1
# recusar as ligações não autenticadas vindas do exterior
protected-mode yes
# palavra-passe, indispensável assim que o Redis deixa de estar na mesma máquina
requirepass un_mot_de_passe_long_et_aleatoiresudo systemctl restart redis-serverSe a aplicação e o Redis estiverem na mesma máquina, mantém o bind 127.0.0.1: é a configuração mais segura, e a palavra-passe passa a ser uma segunda barreira em vez da única.
Configurar o Laravel
As chaves do ficheiro .env mudaram de nome ao longo das versões. Eis as do Laravel 13, tal como constam do ficheiro gerado na instalação:
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redisÉ o erro mais frequente neste tema, e é silencioso: uma chave desconhecida no .env não provoca erro nenhum, a aplicação limita-se a continuar com o driver por omissão. O QUEUE_DRIVER passou a QUEUE_CONNECTION logo no Laravel 5.7, e o CACHE_DRIVER tornou-se CACHE_STORE no Laravel 11.
Recarrega a configuração e verifica o que a aplicação usa de facto. Atenção: a cache de configuração congela estes 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 : redisVerificar que funciona mesmo
Uma definição aceite não é uma definição que funciona. Escreve um valor e volta a lê-lo:
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"]);
'O nome completo da facade é necessário aqui: uma vez instalada a extensão phpredis, Redis designa a classe da extensão, o Laravel deixa de registar o seu alias, e um simples Redis::ping() falha com « Non-static method Redis::ping() cannot be called statically ».
Cache::get : valeur
Redis::ping : 1
version : 8.0.2Um redis-cli --scan na base 0 não devolve nada, e conclui-se que a cache não funciona. Na realidade, o Laravel escreve a cache na base 1 e empilha dois prefixos. A chave do exemplo acima fica registada com este nome exato:
redis-cli -n 1 --scanlaravel-database-laravel-cache-gk_testO primeiro prefixo vem de database.redis.options.prefix, o segundo de cache.prefix. A base 1 é fixada por database.redis.cache.database, o que isola a cache das filas de espera e das sessões.
phpredis ou predis
phpredis | predis | |
|---|---|---|
| Natureza | extensão C | biblioteca PHP |
| Instalação | apt install php-redis | composer require predis/predis |
| Predefinição do Laravel 13 | sim | não |
| Acesso root ao servidor | necessário | não necessário |
Prefere o phpredis a partir do momento em que administras a máquina: o tratamento do protocolo faz-se em C. O predis continua útil num alojamento partilhado onde não podes instalar extensões. Nesse caso:
composer require predis/predisREDIS_CLIENT=predisTratar as filas de espera
Passar o QUEUE_CONNECTION para Redis não chega: é preciso um processo que consuma as tarefas.
php artisan queue:work redis --tries=3Os registos destes processos ficam em storage/logs, caminho devolvido por storage_path() entre os caminhos da aplicação. Em produção, este processo tem de ser supervisionado para reiniciar depois de uma falha ou de um deployment. O Supervisor é a ferramenta habitual, mas uma unidade systemd também serve. Não te esqueças de relançar os processos depois de cada deployment, senão continuam a executar o código antigo carregado em memória:
php artisan queue:restartErros frequentes
redis-cli -n 1 --scan.bind 127.0.0.1 quando a aplicação está na mesma máquina, e acrescenta requirepass assim que deixa de estar.queue:work.