0Pricing
C# Academy · Aula

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 EvictByTagAsync quando 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 write

Bloqueio 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 regeneration

Cache 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-wide

Verificaçã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.EvictByTagAsync as 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

  1. Algoritmos de limitação de taxa
  2. Configurando o middleware de limitação de taxa
  3. Fundamentos do cache de saída
  4. Políticas de cache e invalidação
← Voltar para C# Academy