Projetos práticos para aprender Redis
Casos técnicos, padrões de uso e práticas recomendadas para você aplicar Redis de forma eficaz no cotidiano de desenvolvimento.
1) Cache de API com Redis
Meu objetivo com este modelo é reduzir latência em endpoints quentes e aliviar a carga do banco de dados. O Redis atua como camada de cache com TTL, evitando recomputações desnecessárias e mantendo consistência com invalidações acionadas por eventos de escrita.
- Escolha entre armazenar dados como strings JSON ou como hashes de atributos. Hashes são eficientes para armazenar múltiplos campos sem reconstruir objetos inteiros.
- Pattern Cache-aside: na leitura, verifico o cache; em caso de miss, busco do DB e armazeno novamente no cache com TTL.
- Estratégias de invalidação: quando houver escrita, posso excluir a chave correspondente (cache invalidation) ou atualizar com data/hora de versão para evitar leituras desatualizadas.
- Perfis de dados: se a granularidade for alta (muitos recursos), prefira chaves por recurso, por exemplo:
user:ID,endpoint:products:ID.
2) Streaming de eventos para processamento em tempo real com Redis Streams
Para cenários de event sourcing ou processamento assíncrono, redesenhei fluxos com Redis Streams. Eles permitem registrar eventos com ordem temporal, distribuir entre consumers e confirmar processing (ack) de forma idempotente.
- Adicionar eventos com XADD, por exemplo:
XADD events:pageview * user_id 123 action "view" page "/home". - Consumir com grupos de consumidores:
XREADGROUP GROUP analytics g1 STREAMS events:pageview > COUNT 10 BLOCK 0. - Avaliar processamento com XACK para confirmar cada mensagem:
XACK events:pageview g1 1618884470000-0.
/* Exemplo de fluxo simples com Redis Streams */
XADD events:pageview * user_id 123 action "view" page "/home"
XADD events:pageview * user_id 456 action "click" page "/products/42"
# Em consumidor
XREADGROUP GROUP analytics g1 STREAMS events:pageview > COUNT 10 BLOCK 0
# Depois de processar, confirme
XACK events:pageview g1 1618884470000-0
3) Filas de jobs com listas para processamento assíncrono
Redis Lists funcionam bem como fila de trabalhos simples com bloqueio. A estratégia é empurrar tarefas com LPUSH e consumir com BRPOP, permitindo workers escaláveis e sem polling desnecessário.
- Inserção de jobs:
LPUSH queue:jobs "email:send" - Consumo com bloqueio:
BRPOP queue:jobs 0(aguarda nova tarefa) - Idempotência: projeto com idempotência no processamento para evitar efeitos duplicados em falhas.
4) Leaderboard e métricas com Sorted Sets
Sorted Sets permitem manter rankings com pontuação associada a cada usuário ou objeto. São ideais para leaderboards, métricas de engajamento e séries temporais agregadas.
- Atualização de pontuação:
ZADD leaderboard:game1 1500 user:1001 - Visualização de top N:
ZREVRANGE leaderboard:game1 0 9 WITHSCORES - Incrementos atômicos:
ZINCRBY leaderboard:game1 25 user:1001
Gostou? Continue aprendendo com mais conteúdos
Leve para o próximo nível consultando outros posts da Yurideveloper que exploram práticas avançadas de Redis e padrões de arquitetura.
Sou Apaixonado pela programação e estou trilhando o caminho de ter cada diz mais conhecimento e trazer toda minha experiência vinda do Design para a programação resultando em layouts incríveis e idéias inovadoras! Conecte-se Comigo!