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:

  1. A aplicação pede um dado.
  2. 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.
  3. 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! 😄