Capítulo 5 de 5

Instalar o Redis no Debian 13 e ligá-lo ao Laravel 13

verificado a 7 Setembro 2026 · 4 min

Resposta rápida

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

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

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

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

O PONG confirma que o serviço está a correr e responde. Ativa-o no arranque:

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

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

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

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

.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 e QUEUE_DRIVER já não existem

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

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

Verificar que funciona mesmo

Uma definição aceite não é uma definição que funciona. Escreve um valor e volta a lê-lo:

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"]);
'

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

code
Cache::get   : valeur
Redis::ping  : 1
version      : 8.0.2
Porque é que as tuas chaves parecem não existir

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

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

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

bash
composer require predis/predis
.env
REDIS_CLIENT=predis

Tratar as filas de espera

Passar o QUEUE_CONNECTION para Redis não chega: é preciso um processo que consuma as tarefas.

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

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

bash
php artisan queue:restart

Erros frequentes

CACHE_DRIVER e QUEUE_DRIVER já não existem Renomeados CACHE_STORE (Laravel 11) e QUEUE_CONNECTION (Laravel 5.7). Uma chave desconhecida não emite erro nenhum: a aplicação continua simplesmente com o driver por omissão.
Procurar as chaves na base 0 O Laravel escreve a cache na base 1. Usa redis-cli -n 1 --scan.
Esquecer os dois prefixos A chave leva o prefixo da ligação e o da cache: laravel-database-laravel-cache-…
Instalar o predis por reflexo Desde o Laravel 11, o cliente por omissão é o phpredis, uma extensão C mais rápida. O predis só se justifica sem acesso root.
Redis exposto sem palavra-passe Mantém o bind 127.0.0.1 quando a aplicação está na mesma máquina, e acrescenta requirepass assim que deixa de estar.
QUEUE_CONNECTION=redis sem processo de tratamento As tarefas acumulam-se sem nunca serem executadas enquanto não estiver a correr um queue:work.
Newsletter

Os novos testes, tutoriais e projetos, por e-mail.

Testes reproduzíveis, código versionado, resultados datados. Nunca spam.