O cache é tipo aquele caderno de cola bem feito que você usa na prova: economiza tempo, evita retrabalho e te salva em momentos críticos. Mas, claro, tem várias formas de usar esse "caderno mágico", cada uma com suas vantagens, desvantagens e pegadinhas.
Aqui vai um detalhamento de cada estratégia, com exemplos e observações que vão te ajudar a escolher a certa pro seu sistema.
1. 🔍 Cache-Aside (Lazy Loading)
"Procura no cache, se não achar, vai no banco e guarda pro futuro."
Como funciona:
- A aplicação pede um dado.
- Primeiro ela dá uma olhada no cache:
- Se estiver lá, ótimo: retorna direto.
- Se não estiver, vai no banco de dados, pega, devolve pro cliente e salva no cache pra próxima vez.
- O cache só recebe dados sob demanda.
Exemplo prático:
Imagine um sistema de e-commerce. Quando o usuário entra numa página de produto, você consulta o cache com o ID daquele produto. Se não estiver, você busca no banco, exibe e já guarda no cache.
✅ Vantagens:
- Simples de implementar.
- O cache não fica cheio de coisas inúteis.
- Evita cache desatualizado automaticamente.
❌ Desvantagens:
- Primeira requisição sempre será lenta (cache miss).
- A lógica do cache fica por conta da aplicação — mais responsabilidade no código.
2. 📚 Read-Through
"A aplicação nem se preocupa mais, o cache cuida de tudo."
Como funciona:
- A aplicação consulta o cache.
- Se o dado não estiver lá, o próprio cache se encarrega de buscar no banco, salvar e devolver o resultado.
- A lógica de leitura está encapsulada no cache.
Exemplo prático:
Sistemas que usam bibliotecas/frameworks de cache prontos, tipo o Spring Cache no Java, Redis com bibliotecas específicas etc. A aplicação só chama get('usuario:123')
e o resto é mágica.
✅ Vantagens:
- Código da aplicação fica mais limpo.
- O cache sabe como se virar em caso de miss.
❌ Desvantagens:
- Menos controle da aplicação.
- Cache precisa ser bem configurado (e inteligente).
3. ✍️ Write-Through
"Escreveu? Joga no cache e no banco de uma vez só."
Como funciona:
- Toda vez que a aplicação escreve ou atualiza um dado, ela salva no cache e no banco de dados.
- Assim, o cache já está pronto para a próxima leitura.
Exemplo prático:
Imagine que o usuário atualiza o e-mail. Com essa estratégia, o novo e-mail é salvo no banco e no cache de uma vez só — sem cache desatualizado.
✅ Vantagens:
- Cache e banco sempre em sincronia.
- Evita dados "velhos" no cache.
❌ Desvantagens:
- Pode causar lentidão nas escritas (duas operações em vez de uma).
- Se o cache ou banco estiver fora, a operação pode falhar.
4. ⏭ Write-Around
"Escreve direto no banco, e o cache só entra quando for preciso."
Como funciona:
- Escritas vão somente pro banco de dados.
- O cache só é atualizado quando os dados forem lidos pela primeira vez (e isso gera um cache miss).
Exemplo prático:
Um sistema de cadastro. O dado do novo cliente é salvo no banco, mas não vai direto pro cache. Só quando alguém buscar aquele cliente, o dado entra no cache.
✅ Vantagens:
- Evita encher o cache com dados que talvez ninguém vá acessar de novo.
- Reduz escritas no cache, melhorando desempenho em algumas situações.
❌ Desvantagens:
- Pode gerar cache miss logo após a escrita.
- Mais leitura no banco quando os dados são acessados logo após serem criados/atualizados.
5. ⌛ Write-Back (Write-Behind)
"Escreve no cache agora e manda pro banco depois com calma."
Como funciona:
- A aplicação escreve só no cache.
- Depois, o cache envia os dados pro banco de tempos em tempos ou em lote.
Exemplo prático:
Sistemas que recebem muitos eventos de sensores/IoT. Eles escrevem tudo no cache (como Redis ou Memcached), e uma thread de background ou processo assíncrono faz o "flush" pro banco periodicamente.
✅ Vantagens:
- Escritas super rápidas (só no cache).
- Agrupamento de escritas reduz carga no banco.
❌ Desvantagens:
- Risco de perda de dados (se o cache morrer antes de escrever no banco).
- Lógica mais complexa de sincronização.
🎯 Qual usar no seu sistema?
Depende do que você mais valoriza:
Estratégia | Melhor pra... | Atenção com... |
---|---|---|
Cache-Aside | Flexibilidade, controle | Cache miss nas primeiras leituras |
Read-Through | Simplicidade de código | Configuração do cache |
Write-Through | Consistência entre cache e banco | Latência na escrita |
Write-Around | Evitar encher o cache | Leituras logo após escritas |
Write-Back | Escrita super performática | Perda de dados, complexidade |
Se curtiu esse resumo e quer que eu gere um infográfico, apresentação ou até mesmo código de exemplo com essas estratégias (usando Redis, por exemplo), é só me dar um alô nos comentários! 😄