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
- Abstração IDistributedCache
- Conectando ao Redis
- Padrões e expiração de cache
- Armazenando objetos serializados em cache