0Pricing
C# Academy · Aula

Padrões e expiração de cache

Aplique o padrão cache-aside e defina expirações.

Padrões e expiração de cache é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 3 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.

Padrões de cache

A forma como você lê e grava em um cache é um padrão. O mais comum em aplicativos Web é o cache sob demanda, no qual seu código gerencia o cache ao redor da fonte de dados.

O padrão de cache sob demanda

O cache sob demanda (carregamento preguiçoso) funciona em três etapas: verifique o cache; em caso de ausência, carregue da fonte e preencha o cache; retorne o valor. O cache é preenchido conforme a necessidade.

async Task<string> GetForecastAsync(string city)
{
    string key = $"forecast:{city}";
    string cached = await _cache.GetStringAsync(key);
    if (cached is not null) return cached;

    string fresh = await _api.LoadForecastAsync(city);
    await _cache.SetStringAsync(key, fresh);
    return fresh;
}

Por que a expiração é essencial

Os dados armazenados em cache podem ficar obsoletos. A expiração remove automaticamente as entradas depois de um período, para que a próxima leitura carregue dados atualizados, equilibrando o desempenho e a obsolescência.

Expiração absoluta

A expiração absoluta remove uma entrada em um momento fixo, independentemente do uso. Use-a quando os dados forem válidos somente durante um intervalo conhecido.

var options = new DistributedCacheEntryOptions
{
    AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
};

Expiração deslizante

A expiração deslizante reinicia o temporizador a cada acesso. Uma entrada permanece enquanto for usada regularmente, mas é removida após um período de inatividade. É ótima para dados semelhantes aos de uma sessão.

var options = new DistributedCacheEntryOptions
{
    SlidingExpiration = TimeSpan.FromMinutes(5)
};

Combinando os dois

Você pode definir ambas: a expiração deslizante mantém dados usados com frequência ativos, enquanto um limite absoluto garante que a entrada nunca permaneça além de um máximo, forçando uma atualização eventual.

var options = new DistributedCacheEntryOptions
{
    SlidingExpiration = TimeSpan.FromMinutes(5),
    AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
};

Aplicando opções ao gravar

Passe as options como terceiro argumento para SetStringAsync (ou SetAsync) para que a entrada carregue sua própria política de expiração.

await _cache.SetStringAsync(key, fresh, options);

Gravação direta e invalidação

Quando os dados da fonte mudarem, remova ou atualize o cache para que as leituras não forneçam valores obsoletos. O cache sob demanda normalmente associa as gravações a um RemoveAsync na chave afetada.

await _repository.UpdateForecastAsync(city, value);
await _cache.RemoveAsync($"forecast:{city}");

Evitando a avalanche do cache

Se uma chave popular expirar, muitas solicitações poderão recarregá-la ao mesmo tempo (uma avalanche). Reduza esse risco com bloqueios curtos, expirações ligeiramente aleatorizadas ou atualização em segundo plano, para que apenas uma solicitação reconstrua a entrada.

Escolhendo valores de expiração

Escolha as durações com base na frequência de alteração dos dados e no nível de obsolescência aceitável. Dados de referência toleram tempos de vida (TTL) longos; dados que mudam rapidamente precisam de tempos de vida curtos ou de invalidação baseada em eventos.

Custo de uma ausência

Cada ausência custa um carregamento da fonte, portanto projete chaves e tempos de vida para maximizar a taxa de acertos. Monitore as proporções de acertos e ausências para ajustar o cache ao longo do tempo.

Verificação rápida

Teste os padrões de cache e a expiração.

Recapitulação

O padrão de cache sob demanda verifica o cache, carrega os dados em caso de ausência e o preenche. A expiração absoluta remove a entrada em um horário fixo; a expiração deslizante é redefinida no acesso; combine-as com DistributedCacheEntryOptions. Invalide nas gravações com RemoveAsync, evite avalanches e ajuste os tempos de vida e as chaves com base nos padrões de acesso e no nível de obsolescência aceitável.

Perguntas Frequentes

A aula “Padrões e expiração de cache” é grátis?

Sim — o texto completo de “Padrões e expiraçã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 C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Padrões e expiração de cache”?

Aplique o padrão cache-aside e defina expirações. 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 3 de 4.

Quanto tempo leva a aula “Padrões e expiraçã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 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. Abstração IDistributedCache
  2. Conectando ao Redis
  3. Padrões e expiração de cache
  4. Armazenando objetos serializados em cache
← Voltar para C# Academy