Políticas de cache e invalidação
Controle a duração do cache e as tags.
Políticas de cache e invalidação é uma aula grátis de C# 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 C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.
Políticas nomeadas
Em vez de repetir as configurações do cache em cada ponto de extremidade, defina políticas nomeadas reutilizáveis uma vez e faça referência a elas pelo nome.
builder.Services.AddOutputCache(options =>
{
options.AddPolicy("Short", policy =>
policy.Expire(TimeSpan.FromSeconds(10)));
options.AddPolicy("Long", policy =>
policy.Expire(TimeSpan.FromMinutes(10)));
});Aplicando uma política nomeada
Faça referência à política pelo nome ao armazenar um ponto de extremidade em cache.
app.MapGet("/catalog", GetCatalog)
.CacheOutput("Long");Etiquetas do cache
Etiquetas agrupam entradas relacionadas do cache para que você possa invalidá-las em conjunto. Atribua uma etiqueta a um ponto de extremidade com Tag na política.
app.MapGet("/products", GetProducts)
.CacheOutput(policy => policy
.Expire(TimeSpan.FromMinutes(5))
.Tag("products"));Armazenamento do cache de saída
A invalidação passa por IOutputCacheStore. Injete-o e chame EvictByTagAsync para remover todas as entradas que tenham uma etiqueta.
app.MapPost("/products", async (
Product p, AppDb db, IOutputCacheStore cache, CancellationToken ct) =>
{
db.Products.Add(p);
await db.SaveChangesAsync(ct);
await cache.EvictByTagAsync("products", ct);
return Results.Created($"/products/{p.Id}", p);
});Por que invalidar nas gravações
Uma lista armazenada em cache fica desatualizada no momento em que os dados subjacentes são alterados. Remover a etiqueta relevante a cada criação, atualização ou exclusão mantém as leituras atualizadas sem esperar pela expiração.
// After any mutation:
await cache.EvictByTagAsync("products", ct);Atribuição de etiquetas por recurso
Atribua etiquetas com uma granularidade maior para remover apenas as respostas armazenadas em cache de um item, e não de toda a coleção.
app.MapGet("/products/{id}", GetProduct)
.CacheOutput(policy => policy.Tag("products"));
// Evict the single item's detail + the list together
await cache.EvictByTagAsync("products", ct);Variações em uma política
Combine regras de expiração, etiquetas e variação em uma única política nomeada para obter um contrato completo de armazenamento em cache.
options.AddPolicy("ProductList", policy => policy
.Expire(TimeSpan.FromMinutes(5))
.Tag("products")
.SetVaryByQuery("page", "size"));Valor personalizado de variação
VaryByValue permite definir a chave do cache com base em dados arbitrários da solicitação, como um identificador de locatário resolvido a partir da solicitação.
policy.VaryByValue(context =>
new KeyValuePair<string, string>(
"tenant",
context.Request.Headers["X-Tenant"].ToString()));Remoção versus expiração
Há duas maneiras de as entradas deixarem o cache:
- Expiração: baseada em tempo e automática por meio de
Expire. - Remoção: explícita, por meio de
EvictByTagAsyncquando os dados são alterados.
Use ambas: uma expiração curta como rede de segurança e a remoção para garantir a correção.
// belt-and-suspenders: Expire(5min) + EvictByTag on writeBloqueio e proteção contra avalanche
O armazenamento da saída em cache combina, por padrão, perdas concorrentes: quando muitas solicitações atingem ao mesmo tempo um ponto de extremidade sem cache, apenas um handler é executado enquanto os demais aguardam. Você pode desabilitar esse comportamento com SetLocking(false).
policy.SetLocking(false); // allow concurrent regenerationCache de saída distribuído
Por padrão, o armazenamento é feito em memória e por instância. Para vários servidores, use um armazenamento distribuído como Redis para que todas as instâncias compartilhem e invalidem o mesmo cache.
// Register a distributed IOutputCacheStore implementation
// (e.g. a Redis-backed package) so EvictByTag works cluster-wideVerificação rápida
Teste sua compreensão sobre invalidação.
Recapitulação
Você aprendeu sobre políticas de cache e invalidação:
- Defina políticas nomeadas reutilizáveis e aplique-as pelo nome.
- Etiquetas agrupam entradas;
IOutputCacheStore.EvictByTagAsyncas remove durante as gravações. - Combine expiração (automática) com remoção (explícita).
- Use um armazenamento distribuído em implantações com vários servidores.
Com isso, o curso de limitação de taxa e armazenamento em cache está concluído.
Perguntas Frequentes
A aula “Políticas de cache e invalidação” é grátis?
Sim — o texto completo de “Políticas de cache e invalidação” é 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 C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.
O que vou aprender em “Políticas de cache e invalidação”?
Controle a duração do cache e as tags. Você pratica C# 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 C# Academy?
Nenhuma experiência prévia é necessária. C# 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 “Políticas de cache e invalidação”?
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 C# Academy?
Sim. Cada aula de C# 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
- Algoritmos de limitação de taxa
- Configurando o middleware de limitação de taxa
- Fundamentos do cache de saída
- Políticas de cache e invalidação