0Pricing
C# Academy · Lezione

Caching di oggetti serializzati

Memorizzi e recuperi oggetti complessi.

Caching di oggetti serializzati è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.

Memorizzazione nella cache oltre le stringhe

Le applicazioni reali memorizzano nella cache oggetti, non solo stringhe. Poiché IDistributedCache memorizza byte, è necessario serializzare l'oggetto in una rappresentazione composta da byte o stringhe e deserializzarlo quando lo si recupera. JSON è la scelta abituale.

Serializzazione con System.Text.Json

Utilizzi System.Text.Json per convertire un oggetto in una stringa JSON, quindi la memorizzi con 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);

Deserializzazione durante la lettura

Durante la lettura, recuperi la stringa JSON e la deserializzi nuovamente nel tipo corretto, ricordando di gestire il valore null in caso di mancato riscontro nella cache.

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

Un helper generico riutilizzabile

Racchiuda la logica di serializzazione e deserializzazione in metodi di estensione, così i chiamanti possono memorizzare nella cache qualsiasi tipo in modo semplice.

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);
}

L'helper generico Get

Il getter corrispondente deserializza nuovamente il valore in T e restituisce default in caso di mancato riscontro.

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);
}

Un pattern GetOrCreate

Combini cache-aside e serializzazione in un unico helper: restituisca l'oggetto memorizzato nella cache oppure esegua una factory, memorizzi il risultato nella cache e lo restituisca.

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;
}

Utilizzo di GetOrCreate

Il punto di chiamata diventa una sola riga che nasconde tutti i meccanismi della cache.

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

Opzioni del serializzatore

Riutilizzi una singola istanza di JsonSerializerOptions, ad esempio per usare il camelCase o ignorare i valori nulli, così da mantenere coerenti e contenuti i payload memorizzati nella cache ed evitare di allocare ripetutamente le opzioni.

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

Versionamento delle strutture memorizzate

Se la struttura di un tipo memorizzato nella cache cambia, il vecchio JSON potrebbe non essere deserializzabile. Includa un segmento di versione nella chiave, ad esempio product:v2:1, così una distribuzione dell'applicazione ignorerà naturalmente le voci incompatibili.

Mantenga contenuti i payload

Memorizzi nella cache solo i campi necessari. Payload più piccoli comportano un minore utilizzo della rete e della memoria in Redis e una serializzazione più veloce a ogni lettura e scrittura.

Consideri il costo della serializzazione

La serializzazione non è gratuita. Per i percorsi più utilizzati, valuti formati compatti o la memorizzazione nella cache di risultati già sottoposti a rendering e misuri sempre i risultati per verificare che la cache offra effettivamente un vantaggio complessivo.

Verifica rapida

Verifichi la memorizzazione nella cache di oggetti serializzati.

Riepilogo

Per memorizzare oggetti nella cache, li serializzi, generalmente in JSON tramite System.Text.Json, durante la scrittura e li deserializzi durante la lettura. I metodi generici SetAsync<T>/GetAsync<T> e un helper GetOrCreateAsync nascondono i dettagli e implementano il pattern cache-aside in modo pulito. Riutilizzi JsonSerializerOptions, assegni una versione alle chiavi della cache quando cambiano le strutture, mantenga contenuti i payload e misuri il costo della serializzazione nei percorsi più utilizzati.

Domande Frequenti

La lezione «Caching di oggetti serializzati» è gratuita?

Sì — il testo completo di «Caching di oggetti serializzati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.

Cosa imparerò in «Caching di oggetti serializzati»?

Memorizzi e recuperi oggetti complessi. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Caching di oggetti serializzati»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Astrazione IDistributedCache
  2. Connessione a Redis
  3. Pattern e scadenza della cache
  4. Caching di oggetti serializzati
← Torna a C# Academy