ADR-001: Redis Cache-Aside com Armazenamento de DTO
Status: Aceito Data: 2026-03-15
Contexto
A aplicação precisa de uma estratégia de cache para reduzir a carga no banco de dados para dados acessados frequentemente (perfis de usuário, dados de sessão). Duas perguntas precisavam de resposta:
Qual padrão de cache? (cache-aside, read-through, write-through)
O que o cache armazena? (models do Prisma vs DTOs)
Decisão
Padrão cache-aside gerenciado pela camada Service, armazenando DTOs (não models do Prisma).
Caminho de leitura: Service checa Redis → hit retorna DTO cacheado → miss consulta Repository → Mapper converte para DTO → cache populado → retorna
Caminho de escrita: Service chama Repository → em caso de sucesso, invalida cache → Mapper converte → retorna
TTL: 15 minutos (alinhado com tempo de vida do access token)
Formato de armazenamento: DTO serializado via
JSON.stringify
Por que cache-aside?
A camada Service já orquestra Repository + Cache, tornando-a a dona natural da lógica de cache. Read-through/write-through exigiria uma camada de proxy de cache separada que adiciona complexidade sem benefício na nossa escala.
Por que armazenar DTOs?
Cache hits pulam o Mapper completamente — leituras mais rápidas
DTOs são o formato final que os consumidores precisam — sem transformação redundante
Models do Prisma podem conter campos sensíveis (hashes de senha) que não devem ser serializados no Redis
Consequências
Positivas
Implementação simples — Service chama
Cache.get()antes deRepository.find()Cache hits são rápidos — sem pós-processamento necessário
Campos sensíveis nunca chegam ao Redis
Negativas
Mudanças no formato do DTO requerem invalidação de cache no deploy — se um campo é adicionado/removido do DTO, entradas stale no cache terão o formato antigo
Cache e Mapper são acoplados — mudar o DTO significa que ambos devem ser considerados
Mitigação
TTL de 15 minutos limita a janela de dados desatualizados
Pipeline de deploy pode limpar chaves de cache relevantes quando mudanças no DTO são detectadas (passo manual por enquanto)
Atualizado