Projetos Práticos para Aprender Redis: 7 Atividades para Dominar o Banco de Dados em Memória

Projetos Práticos para Aprender Redis: 7 Atividades para Dominar o Banco de Dados em Memória






Projetos práticos para aprender Redis



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.