0Pricing
C# Academy · Aula

Abstração IDistributedCache

Armazene dados em cache entre vários servidores.

Abstração IDistributedCache é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 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.

Por que Usar o Cache Distribuído?

Um cache em memória vive dentro de um único processo, portanto é perdido quando o processo é reiniciado e não é compartilhado entre servidores. Um cache distribuído vive em um armazenamento externo (como o Redis) que todas as instâncias do seu aplicativo podem ler e gravar, tornando o armazenamento em cache consistente em uma implantação ampliada horizontalmente.

A interface IDistributedCache

O ASP.NET Core abstrai o cache distribuído por meio de IDistributedCache em Microsoft.Extensions.Caching.Distributed. Seu código depende dessa interface, não diretamente do Redis, portanto você pode trocar as implementações.

public interface IDistributedCache
{
    byte[] Get(string key);
    Task<byte[]> GetAsync(string key, CancellationToken token = default);
    void Set(string key, byte[] value, DistributedCacheEntryOptions options);
    void Remove(string key);
    void Refresh(string key);
}

Ela armazena bytes

Observe que o cache armazena byte[]. Para armazenar cadeias de caracteres ou objetos em cache, primeiro serialize-os. Existem métodos de extensão convenientes para cadeias de caracteres no caso comum.

using Microsoft.Extensions.Caching.Distributed;

await cache.SetStringAsync("greeting", "Hello, world");
string value = await cache.GetStringAsync("greeting");

Injetando o cache

Solicite IDistributedCache por injeção no construtor, como faria com qualquer serviço.

public class WeatherService
{
    private readonly IDistributedCache _cache;
    public WeatherService(IDistributedCache cache)
    {
        _cache = cache;
    }
}

Lendo do cache

GetStringAsync retorna null quando a chave não existe ou expirou. Sempre trate o caso de ausência.

string cached = await _cache.GetStringAsync("forecast:istanbul");
if (cached is null)
{
    // cache miss: load from source
}

Gravando no cache

SetStringAsync armazena um valor com options de expiração opcionais (abordadas em uma lição posterior).

await _cache.SetStringAsync(
    "forecast:istanbul",
    "22C sunny",
    new DistributedCacheEntryOptions
    {
        AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
    });

Removendo e atualizando

RemoveAsync remove uma chave (por exemplo, quando os dados subjacentes mudam). RefreshAsync redefine uma expiração deslizante sem alterar o valor.

await _cache.RemoveAsync("forecast:istanbul");
await _cache.RefreshAsync("session:abc123");

A implementação em memória

Para desenvolvimento ou testes, registre o cache distribuído em memória. Ele implementa a mesma interface, portanto seu código é idêntico, mas os dados não são realmente compartilhados entre processos.

builder.Services.AddDistributedMemoryCache();

Código independente do provedor

Como você depende apenas de IDistributedCache, trocar o provedor em memória por Redis (ou SQL Server) exige uma alteração de uma linha no registro, sem mudanças no código dos seus serviços.

Convenções de nomenclatura de chaves

Use chaves estruturadas e com namespace, como entity:id:field (por exemplo, user:42:profile). Convenções claras evitam colisões e tornam a invalidação do cache previsível.

string key = $"user:{userId}:profile";

Quando não usar cache

Armazene em cache dados que sejam lidos com frequência e raramente alterados. Dados altamente voláteis ou confidenciais específicos do usuário talvez não sejam adequados, e os riscos de dados obsoletos sempre devem ser ponderados em relação aos ganhos de desempenho.

Verificação rápida

Teste a abstração IDistributedCache.

Recapitulação

IDistributedCache abstrai um cache externo e compartilhado para que cada instância do aplicativo veja os mesmos dados. Ele armazena byte[], com GetStringAsync/SetStringAsync para cadeias de caracteres, além de RemoveAsync e RefreshAsync. Depender da interface mantém o código independente do provedor, permitindo alternar entre AddDistributedMemoryCache e Redis com uma linha. Use chaves claras com namespace.

Perguntas Frequentes

A aula “Abstração IDistributedCache” é grátis?

Sim — o texto completo de “Abstração IDistributedCache” é 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 “Abstração IDistributedCache”?

Armazene dados em cache entre vários servidores. 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 1 de 4.

Quanto tempo leva a aula “Abstração IDistributedCache”?

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