Padrões de invalidação de cache
Aplique estratégias de invalidação cache-aside, write-through e baseadas em TTL.
Padrões de invalidação de cache é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
O problema difícil
"Há apenas duas coisas difíceis na Ciência da Computação: a invalidação do cache e dar nomes às coisas." — Phil Karlton. Saber quando e como invalidar dados armazenados em cache é fundamental.
Expiração baseada em TTL (passiva)
A estratégia mais simples: defina um TTL e aceite que o cache possa fornecer dados desatualizados por até esse período. Funciona quando um pequeno grau de desatualização é aceitável.
<?php
Cache::put("user:1", $user, 300); // expires in 5 minutes automaticallyInvalidação na gravação
Ao atualizar os dados, exclua ou atualize imediatamente a chave correspondente do cache.
<?php
function updateUser(int $id, array $data): void {
User::find($id)->update($data);
Cache::forget("user:$id"); // delete cache
// Or re-warm:
Cache::put("user:$id", User::find($id), 300);
}Marcação do cache
Marque entradas relacionadas do cache para poder invalidar um grupo inteiro de uma só vez — por exemplo, todas as entradas de cache de um usuário específico.
<?php
// Store with tags:
Cache::tags(["user:1", "posts"])->put("user:1:recent-posts", $posts, 600);
// Invalidate all "user:1" entries:
Cache::tags("user:1")->flush();Invalidação orientada por eventos
No Laravel, use eventos de modelos Eloquent para invalidar automaticamente o cache quando um modelo for salvo ou excluído.
<?php
class User extends Model {
protected static function booted(): void {
static::saved(fn($u) => Cache::forget("user:{$u->id}"));
static::deleted(fn($u) => Cache::forget("user:{$u->id}"));
}
}Cache-aside com versionamento
Acrescente um número de versão às chaves do cache. Incrementar a versão invalida efetivamente todas as entradas existentes sem excluí-las.
<?php
$v = Cache::get("user:version", 1);
$key = "user:{$id}:v{$v}";
// To invalidate: increment the version
Cache::increment("user:version");Expiração antecipada probabilística (PER)
Para evitar avalanches no cache, recalcular o cache um pouco antes de sua expiração para uma parte das solicitações. Isso evita a expiração simultânea em todos os servidores.
Atualização em segundo plano
Um trabalho em segundo plano repopula as entradas do cache lidas com frequência antes que expirem. O cache nunca fica vazio — as leituras são sempre rápidas.
Servir dados desatualizados enquanto revalida
Forneça imediatamente dados desatualizados enquanto atualiza o cache de forma assíncrona em segundo plano. Isso elimina picos de latência causados por falhas de cache.
Invalidação de cache distribuído
Em uma configuração com vários servidores, um servidor que invalida uma chave do cache não limpa automaticamente os caches locais dos outros servidores. Use Redis pub/sub ou um armazenamento compartilhado para transmitir as invalidações.
Hierarquia de cache
Organize os caches em camadas: um cache local no processo (APCu) diante de um cache distribuído (Redis). O cache local é mais rápido, mas precisa ser invalidado em todas as instâncias quando os dados mudam.
Resumo
Padrões comuns: expiração por TTL (simples), exclusão na gravação (precisa), marcação (agrupada) e orientado por eventos (automático). Escolha com base no quanto você precisa priorizar a atualidade dos dados em relação à simplicidade.
Verificação rápida
O que Cache::tags()->flush() faz?
Perguntas Frequentes
A aula “Padrões de invalidação de cache” é grátis?
Sim — o texto completo de “Padrões de invalidação de cache” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “Padrões de invalidação de cache”?
Aplique estratégias de invalidação cache-aside, write-through e baseadas em TTL. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar PHP Academy?
Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Padrões de invalidação de cache”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de PHP Academy?
Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Por que o armazenamento em cache é importante no PHP
- Redis como back-end de cache do PHP
- Memcached para cache de sessões e objetos
- Padrões de invalidação de cache