Foto de Kevin Ache na Unsplash
Cache costuma entrar na conversa sempre que alguém fala em performance. A ideia é simples: “se está lento, coloca cache”. O problema é que, na prática, cache mal aplicado resolve um problema e cria outros.
Não é raro ver sistemas que até funcionam bem sem cache, mas ficam difíceis de manter depois que ele entra sem critério.
Antes de pensar em cache, vale responder uma pergunta básica:
onde o sistema está lento?
Muitas vezes o problema não é falta de cache, mas:
Colocar cache sem entender o gargalo real só esconde o problema por um tempo.
Cache funciona bem quando você tem:
Configurações, listas estáticas, resultados agregados e respostas de APIs externas são bons candidatos. Nesse cenário, o cache reduz carga e melhora tempo de resposta de forma consistente.
Cache quase nunca dá problema na criação. Ele dá problema na invalidação.
Quando não fica claro:
o sistema começa a servir dado errado. E dado errado em produção costuma ser pior que erro explícito.
Um sinal claro de problema é quando o sistema depende do cache para funcionar corretamente.
Se desligar o cache quebra tudo, isso indica que:
Cache deveria acelerar, não sustentar o sistema.
Cache em dados que mudam o tempo todo geralmente gera:
Quanto mais volátil o dado, maior o custo mental e técnico para manter o cache correto. Em muitos casos, o ganho de performance não compensa a complexidade introduzida.
Cache não é gratuito.
Ele consome memória, adiciona mais uma camada ao sistema e aumenta a complexidade de debug. Quando algo dá errado, você precisa verificar:
Cada camada extra aumenta o esforço para entender o que está acontecendo.
Uma regra prática que costuma funcionar bem:
Primeiro, faça o sistema funcionar corretamente sem cache.
Depois, use cache para otimizar pontos específicos e bem entendidos.
Isso evita decisões precipitadas e mantém o sistema mais previsível.
Quando se fala em cache, muita gente mistura tudo como se fosse a mesma coisa. Na prática, existem camadas diferentes de cache, cada uma com um papel específico. Entender isso evita decisões erradas e expectativas irreais.
Bancos de cache em memória, como Redis, são muito usados no backend porque são rápidos e flexíveis. Eles fazem sentido quando você precisa:
Redis funciona muito bem para:
O erro comum aqui é transformar o Redis em “banco principal”. Cache não é fonte de verdade. Se os dados do Redis forem perdidos, o sistema precisa continuar funcionando.
Cache dentro da aplicação resolve problemas diferentes de cache na borda.
Cache de aplicação (Redis, cache local, etc):
Já cache de infraestrutura atua antes da requisição chegar no servidor.
CDN (Content Delivery Network) e cache em borda são ideais para:
Nesse cenário, o cache:
Cloudflare, por exemplo, atua nesse nível, servindo conteúdo direto da borda sem que a requisição chegue no backend.
Um erro comum é achar que, usando Cloudflare ou outra CDN, não é mais necessário cache no backend. Isso não é verdade.
Cloudflare:
Mas ele não resolve:
As camadas se complementam, não se substituem.
Em sistemas mais maduros, é comum ter:
O ponto crítico é não perder controle. Quanto mais camadas, maior a necessidade de saber:
Sem isso, debug vira loteria.
Não existe “o melhor cache”. Existe cache adequado ao problema.
Usar Redis para tudo, Cloudflare para tudo ou cachear tudo geralmente leva a soluções frágeis. Cada camada resolve um tipo de problema específico, e ignorar isso gera sistemas difíceis de operar.
Em um projeto onde trabalhei, o sistema recebia mais de 30 milhões de visualizações por mês. O volume era alto, os picos eram imprevisíveis e qualquer erro de arquitetura aparecia rápido.
A solução não foi um único tipo de cache, mas a combinação correta de camadas, cada uma resolvendo um problema específico.
No backend, utilizávamos cache em memória para reduzir acesso ao banco e evitar processamento repetido. Consultas mais pesadas e dados derivados eram armazenados com tempo de vida bem definido.
Esse cache não era tratado como fonte de verdade. Se fosse limpo ou reiniciado, o sistema continuava funcionando normalmente, apenas com impacto temporário de performance.
No nível do servidor web, respostas públicas eram cacheadas diretamente, evitando que requisições idênticas chegassem até a aplicação.
Isso reduzia drasticamente:
Para grande parte do tráfego, a aplicação nem chegava a ser executada.
Além disso, havia cache em servidores distribuídos geograficamente, entregando conteúdo diretamente próximo ao usuário final.
Essa camada absorvia picos de acesso e reduzia latência, principalmente em horários de maior tráfego. Em muitos casos, a requisição nem chegava ao servidor de origem.
O que fez essa estratégia funcionar não foi o volume de cache, mas o controle sobre ele.
Cada camada tinha:
Nada era “cacheado por padrão”.
Com essa abordagem:
Cache não foi usado como remendo, mas como parte da arquitetura.
Cache funciona quando é pensado como estratégia, não como solução emergencial. Em sistemas de alto volume, separar responsabilidades entre backend, servidor web e borda faz toda a diferença.
Cache é uma ferramenta poderosa, mas perigosa quando usada sem critério. Ele melhora performance quando aplicado com consciência, e cria problemas quando entra apenas como “solução rápida”.
Entender quando não usar cache é tão importante quanto saber usá-lo.
WhatsApp é um canal excelente para alerta porque ele tem uma característica que e-mail e…
Durante alguns anos, o AMP foi tratado como solução quase obrigatória para quem queria desempenho…
Performance, acessibilidade e boas práticas deixaram de ser “detalhes técnicos” e passaram a impactar diretamente…
O cenário (realista) Você quer receber um evento via API (Webhook), enviar uma mensagem no…
Automação deixou de ser algo exclusivo de grandes sistemas. Hoje, boa parte das aplicações depende…
Durante muito tempo, o WhatsApp foi visto apenas como um canal de comunicação direta: mensagens,…