Backend, APIs e dados · Avançado

Cache: acelerar sem servir dados desatualizados

Em uma linha: Antes de adicionar um cache, decida por quanto tempo um dado desatualizado ainda é aceitável — é a única pergunta que realmente importa.

Onde colocar

No navegador, na rede de distribuição, no servidor de aplicação e em um store compartilhado de chave-valor. Cada camada é mais rápida e mais difícil de invalidar. A maioria da dor vem de camadas empilhadas sem uma única política para decidir.

Três estratégias

Expiração por tempo. Simples e suficiente para a maioria dos casos. Escolha um tempo curto para dados que mudam e um lógico para dados estáveis.

Invalidação por evento. Na escrita, delete a chave. Mais preciso, e requer lembrar de cada lugar que escreve.

Atualização em segundo plano. Sirva uma cópia existente e atualize em paralelo — uma experiência fluida, em troca de um valor ligeiramente desatualizado.

Armadilhas

Uma chave de cache que não inclui a identidade ou as permissões do usuário — assim os dados de um são servidos para outro. Expiração em massa no mesmo momento que derruba o banco de dados. E um cache que mascara uma consulta lenta em vez de corrigi-la.

Indo mais fundo

Meça a taxa de acerto do cache e também o tempo de resposta sem ele. Um cache que esconde um problema em vez de resolvê-lo vai explodir no pior momento — quando se esvaziar, e o sistema for exposto à carga total contra a qual nunca foi testado.