Pub/Sub do Redis
Pub/Sub é um padrão de comunicação de mensagens. Esta lição aborda a funcionalidade de publicação/assinatura do Redis.
O que é Pub/Sub?
O padrão Pub/Sub consiste em:
- Publisher (Publicador): envia mensagens para um canal
- Subscriber (Assinante): recebe mensagens de um canal
- Channel (Canal): o conduíte de mensagens
Publisher → Channel → Subscriber 1
→ Subscriber 2
→ Subscriber 3
Comandos Básicos
SUBSCRIBE: Assinar um Canal
REDIS
# Assinar um único canal
SUBSCRIBE canal1
# Assinar múltiplos canais
SUBSCRIBE canal1 canal2 canal3
Após assinar, o cliente entra em um estado de espera para receber mensagens.
PUBLISH: Publicar uma Mensagem
REDIS
# Publicar uma mensagem em um canal
PUBLISH canal1 "Olá, Redis!"
(integer) 2 # Retorna o número de assinantes que receberam a mensagem
UNSUBSCRIBE: Cancelar Assinatura
REDIS
# Cancelar assinatura de todos os canais
UNSUBSCRIBE
# Cancelar assinatura de um canal específico
UNSUBSCRIBE canal1
Assinatura por Padrão
PSUBSCRIBE: Assinatura por Correspondência de Padrão
REDIS
# Assinar canais que correspondem a um padrão
PSUBSCRIBE news.* # Assinar todos os canais começando com news.
# Exemplo
PSUBSCRIBE user:*:notifications # Assinar todos os canais de notificação de usuário
PUNSUBSCRIBE: Cancelar Assinatura por Padrão
REDIS
# Cancelar todas as assinaturas por padrão
PUNSUBSCRIBE
# Cancelar uma assinatura de padrão específica
PUNSUBSCRIBE news.*
Casos de Uso
1. Envio de Mensagens em Tempo Real
Exemplo: Notificações em Tempo Real
BASH
# Terminal 1: assinar notificações
SUBSCRIBE notifications
# Terminal 2: publicar uma notificação
PUBLISH notifications "Novo usuário registrado"
2. Sala de Bate-papo
Exemplo: Sala de Bate-papo
BASH
# Usuário 1: assinar sala de bate-papo
SUBSCRIBE chatroom:general
# Usuário 2: enviar uma mensagem
PUBLISH chatroom:general "Olá pessoal!"
3. Notificações do Sistema
Exemplo: Alertas do Sistema
BASH
# Administrador: assinar alertas do sistema
SUBSCRIBE system:alerts
# Sistema: enviar um alerta
PUBLISH system:alerts "Alto uso de CPU detectado"
Formato da Mensagem
Formato da mensagem recebida pelos assinantes:
TEXT
1) "message" # Tipo de mensagem
2) "canal1" # Nome do canal
3) "Olá, Redis!" # Conteúdo da mensagem
Formato da mensagem de assinatura por padrão:
TEXT
1) "pmessage" # Tipo de mensagem
2) "news.*" # Padrão assinado
3) "news:sports" # Nome real do canal
4) "Resultado do jogo!" # Conteúdo da mensagem
Notas Importantes
⚠️ Mensagens não são persistidas: Mensagens Pub/Sub não são armazenadas. Assinantes só recebem mensagens enviadas após eles assinarem.
⚠️ Perda de mensagens: Se um assinante desconectar, as mensagens enviadas durante esse período são perdidas.
💡 Alternativa: Quando a persistência de mensagens é necessária, use Redis Streams ou Lists para filas de mensagens.
Redis Stream (Recomendado)
Introduzido no Redis 5.0, Streams são uma solução de fila de mensagens melhor:
REDIS
# Adicionar uma mensagem
XADD mystream * name "Alice" action "login"
"1638361451780-0"
# Ler mensagens
XREAD COUNT 1 STREAMS mystream 0
# Grupos de consumidores
XGROUP CREATE mystream mygroup 0
XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream >
Stream vs Pub/Sub
| Recurso | Pub/Sub | Stream |
|---|---|---|
| Persistência de mensagens | ❌ Não persistidas | ✅ Persistidas |
| Confirmação de mensagens | ❌ Sem ACK | ✅ ACK suportado |
| Grupos de consumidores | ❌ Não suportado | ✅ Suportado |
| Mensagens históricas | ❌ Não pode recuperar | ✅ Consultável |
| Caso de uso | Notificações em tempo real | Filas de mensagens |
❓ Perguntas Frequentes
P As mensagens Pub/Sub são armazenadas?
R Não. Pub/Sub é "fire and forget" — as mensagens não são persistidas.
P Um assinante desconectado pode receber mensagens históricas?
R Não. Use Streams ou Lists para persistência de mensagens.
P Quantos assinantes um canal pode ter?
R Teoricamente ilimitado — depende do desempenho do servidor.
📖 Resumo
- Pub/Sub usa PUBLISH para publicar e SUBSCRIBE para assinar
- Suporta correspondência de padrões com PSUBSCRIBE
- Mensagens não são persistidas, adequado para notificações em tempo real
- Para persistência de mensagens, use Redis Streams
- Streams suportam grupos de consumidores, confirmação de mensagens e consultas históricas
📝 Atividades
- Prática de assinatura: Use dois terminais — um assina, o outro publica
- Assinatura por padrão: Use PSUBSCRIBE para assinar múltiplos canais correspondentes
- Prática de Stream: Use XADD/XREAD para implementar uma fila de mensagens simples
Próxima Lição
Na próxima lição, nós aprenderemos sobre Transações do Redis, abordando uso e cuidados com transações.



