0Pricing
C# Academy · Aula

Armazenando objetos serializados em cache

Armazene e recupere objetos complexos.

Armazenando objetos serializados em cache é 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.

Armazenando mais do que cadeias de caracteres em cache

Aplicativos reais armazenam objetos em cache, não apenas cadeias de caracteres. Como IDistributedCache armazena bytes, você precisa serializar seu objeto para uma representação em bytes ou em cadeia de caracteres e desserializá-lo ao recuperá-lo. JSON é a escolha habitual.

Serializando com System.Text.Json

Use System.Text.Json para transformar um objeto em uma cadeia JSON e depois armazená-lo com SetStringAsync.

using System.Text.Json;

var product = new Product { Id = 1, Name = "Coffee", Price = 4.5m };
string json = JsonSerializer.Serialize(product);
await _cache.SetStringAsync("product:1", json);

Desserializando na leitura

Na leitura, busque a cadeia JSON e desserialize-a de volta para seu tipo, lembrando-se de tratar o null da ausência no cache.

string json = await _cache.GetStringAsync("product:1");
if (json is null) return null;
Product product = JsonSerializer.Deserialize<Product>(json);

Um auxiliar genérico reutilizável

Encapsule a lógica de serialização e desserialização em métodos de extensão para que os chamadores possam armazenar qualquer tipo em cache de forma simples.

public static async Task SetAsync<T>(
    this IDistributedCache cache, string key, T value,
    DistributedCacheEntryOptions options)
{
    string json = JsonSerializer.Serialize(value);
    await cache.SetStringAsync(key, json, options);
}

O auxiliar genérico de leitura

O método de leitura correspondente desserializa de volta para T, retornando default em caso de ausência.

public static async Task<T> GetAsync<T>(
    this IDistributedCache cache, string key)
{
    string json = await cache.GetStringAsync(key);
    return json is null ? default : JsonSerializer.Deserialize<T>(json);
}

Um padrão GetOrCreate

Combine o cache sob demanda com a serialização em um único auxiliar: retorne o objeto armazenado em cache ou execute uma fábrica, armazene o resultado em cache e retorne-o.

public static async Task<T> GetOrCreateAsync<T>(
    this IDistributedCache cache, string key,
    Func<Task<T>> factory, DistributedCacheEntryOptions options)
{
    var existing = await cache.GetAsync<T>(key);
    if (existing is not null) return existing;
    var created = await factory();
    await cache.SetAsync(key, created, options);
    return created;
}

Usando GetOrCreate

O local da chamada se torna uma única linha que oculta todos os mecanismos de armazenamento em cache.

var product = await _cache.GetOrCreateAsync(
    "product:1",
    () => _repository.LoadProductAsync(1),
    new DistributedCacheEntryOptions
    {
        AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(15)
    });

Opções do serializador

Reutilize uma única instância de JsonSerializerOptions (por exemplo, camelCase, ignorar nulos) para manter as cargas armazenadas em cache consistentes e pequenas e evitar alocar options repetidamente.

private static readonly JsonSerializerOptions JsonOptions = new()
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    DefaultIgnoreCondition =
        System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
};

Versionando as estruturas armazenadas em cache

Se a estrutura de um tipo armazenado em cache mudar, o JSON antigo poderá não ser desserializado. Inclua um segmento de versão na chave (por exemplo, product:v2:1) para que uma implantação ignore naturalmente entradas incompatíveis.

Mantenha as cargas úteis enxutas

Armazene em cache apenas os campos necessários. Cargas menores significam menos uso de rede e memória no Redis e serialização mais rápida em cada leitura e gravação.

Considere o custo da serialização

A serialização não é gratuita. Para caminhos muito acessados, considere formatos compactos ou armazenar resultados pré-renderizados em cache e sempre faça medições para confirmar que o cache traz um ganho líquido.

Verificação rápida

Teste o armazenamento de objetos serializados em cache.

Recapitulação

Para armazenar objetos em cache, serialize-os (geralmente em JSON por meio de System.Text.Json) na gravação e desserialize-os na leitura. Os auxiliares genéricos SetAsync<T>/GetAsync<T> e um auxiliar GetOrCreateAsync ocultam os detalhes e implementam o cache sob demanda de forma simples. Reutilize JsonSerializerOptions, versione as chaves do cache quando as estruturas mudarem, mantenha as cargas úteis enxutas e meça o custo da serialização em caminhos muito acessados.

Perguntas Frequentes

A aula “Armazenando objetos serializados em cache” é grátis?

Sim — o texto completo de “Armazenando objetos serializados em 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 “Armazenando objetos serializados em cache”?

Armazene e recupere objetos complexos. 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 “Armazenando objetos serializados em 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