Redis Laravel

Laravel
Tempo de leitura: 4 minutos

Redis Laravel: O Redis é um data structure store (armazenamento de estrutura de dados) em memória, de código aberto, usado como cache, message broker (agente de mensagens) e banco de dados. Integrado ao Laravel, ele se torna uma ferramenta fundamental para melhorar a performance, reduzir a latência de acesso ao banco de dados e habilitar recursos em tempo real.

Este artigo detalha a configuração e o uso do Redis Laravel para Cache, Filas e o padrão Pub/Sub.

1. ⚙️ Configuração e Clientes

O Laravel suporta o Redis através de duas bibliotecas PHP: Predis (baseada em PHP) e PhpRedis (extensão C, mais rápida). O uso do PhpRedis é altamente recomendado devido ao seu desempenho superior.

A. Instalação do PhpRedis (Recomendado)

Antes de configurar no Laravel, a extensão PHP deve estar instalada no servidor:

Bash

# Exemplo para sistemas Debian/Ubuntu com PHP 8.3
sudo apt install php8.3-redis
# Reinicie o seu servidor web (ex: php-fpm ou Apache)

B. Configuração do Laravel

As configurações de conexão são definidas em config/database.php, dentro da chave redis.

PHP

// No arquivo .env
REDIS_CLIENT=phpredis 
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_DB=0          # Banco de dados padrão (default)
REDIS_CACHE_DB=1    # Banco de dados dedicado para cache

// Em config/database.php
'redis' => [
    'client' => env('REDIS_CLIENT', 'phpredis'), // Define qual biblioteca usar
    'default' => [/* ... conexões usando REDIS_DB ... */],
    'cache' => [/* ... conexões usando REDIS_CACHE_DB ... */],
],

C. Configuração de Cluster

Para alta disponibilidade e escalabilidade horizontal, o Laravel suporta nativamente o Redis Cluster, permitindo que você liste múltiplos nós no arquivo de configuração:

PHP

'clusters' => [
    'default' => [
        [
            'host' => env('REDIS_HOST_1', '127.0.0.1'),
            'port' => env('REDIS_PORT_1', 6379),
            // ...
        ],
        [
            'host' => env('REDIS_HOST_2', '127.0.0.1'),
            'port' => env('REDIS_PORT_2', 6380),
            // ...
        ],
    ],
],

2. 🗃️ Interagindo com a Facade Redis

A Facade Redis permite executar qualquer comando nativo do Redis diretamente no Laravel.

PHP

use Illuminate\Support\Facades\Redis;

// SET (Definindo um valor)
Redis::set('username:1', 'João da Silva');

// GET (Obtendo um valor)
$username = Redis::get('username:1'); // "João da Silva"

// EXPIRE (Definindo tempo de expiração em segundos)
Redis::expire('username:1', 3600); // Expira em 1 hora

// INCR (Incrementando um contador)
Redis::incr('views:post:12');

// RPUSH (Adicionando a uma lista)
Redis::rpush('user_feed:5', 'post:301', 'post:302');
$feed = Redis::lrange('user_feed:5', 0, 4); // Obtém os 5 posts mais recentes

3. 🚀 Redis como Cache Padrão

O Redis é um dos drivers de cache mais rápidos disponíveis. Para usá-lo globalmente, ajuste o arquivo .env:

.ENV

CACHE_STORE=redis

O Laravel usa a conexão cache definida em config/database.php (DB 1) por padrão.

A. Uso da Facade Cache

O método remember é ideal para caching de dados do banco de dados:

PHP

use Illuminate\Support\Facades\Cache;
use App\Models\Product;

Route::get('/produtos', function () {
    // Tenta obter 'produtos_home' do cache.
    // Se não existir, executa a função e armazena o resultado por 60 segundos.
    $produtos = Cache::remember('produtos_home', 60, function () {
        return Product::all(); // <-- Consulta lenta ao banco de dados
    });

    return view('produtos.index', ['produtos' => $produtos]);
});

Nota: Se os dados do produto forem alterados, você deve usar Cache::forget('produtos_home') para invalidar o cache imediatamente.

4. 📢 Pub/Sub (Publicar e Assinar)

O Redis Pub/Sub implementa o padrão Message Broker, permitindo comunicação assíncrona em tempo real entre diferentes serviços ou processos da sua aplicação (ex: workers).

A. Publicando uma Mensagem

Um processo envia uma mensagem para um canal específico:

PHP

use Illuminate\Support\Facades\Redis;

// Publica uma mensagem no canal 'notificacoes.vendas'
Redis::publish('notificacoes.vendas', json_encode([
    'venda_id' => 123, 
    'valor' => 550.00
]));

B. Assinando um Canal

Um processo worker ou um comando Artisan fica ouvindo o canal:

PHP

// Este código deve ser executado em um script de longa duração (worker)
Redis::subscribe(['notificacoes.vendas'], function ($message) {
    $data = json_decode($message);
    
    // Lógica para processar a notificação, como enviar um email ou atualizar um dashboard
    // echo "Nova venda recebida: ID " . $data->venda_id;
});

5. 🗂️ Filas (Queues) com Redis

O Redis é frequentemente usado como o driver de fila padrão do Laravel, devido à sua velocidade e robustez.

.ENV

# No seu .env
QUEUE_CONNECTION=redis 

Quando você despacha um job (tarefa assíncrona), ele é armazenado no Redis e processado por um worker em segundo plano, otimizando o tempo de resposta das requisições web.

PHP

use App\Jobs\ProcessOrder;

// A requisição web termina rapidamente
ProcessOrder::dispatch($order)->onQueue('pedidos'); 

✅ Conclusão Redis Laravel

Redis Laravel: A integração do Redis com o Laravel é um divisor de águas em performance. Utilizando o PhpRedis e a Facade Cache, você reduz drasticamente a carga do banco de dados. Além disso, o Redis habilita recursos avançados como Filas assíncronas e Pub/Sub para comunicação em tempo real, tornando-o indispensável para construir aplicações modernas, rápidas e escaláveis.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime

Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.