0Pricing
C# Academy · Lezione

Policy e invalidazione della cache

Controlli la durata della cache e i tag.

Policy e invalidazione della cache è 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.

Policy denominate

Anziché ripetere le impostazioni della cache per ogni endpoint, definisca una volta sola policy denominate riutilizzabili e vi faccia riferimento tramite il nome.

builder.Services.AddOutputCache(options =>
{
    options.AddPolicy("Short", policy =>
        policy.Expire(TimeSpan.FromSeconds(10)));
    options.AddPolicy("Long", policy =>
        policy.Expire(TimeSpan.FromMinutes(10)));
});

Applicazione di una policy denominata

Quando memorizza un endpoint nella cache, faccia riferimento alla policy tramite il suo nome.

app.MapGet("/catalog", GetCatalog)
   .CacheOutput("Long");

Tag della cache

I tag raggruppano le voci correlate della cache, così è possibile invalidarle insieme. Assegni un tag a un endpoint con Tag nella relativa policy.

app.MapGet("/products", GetProducts)
   .CacheOutput(policy => policy
        .Expire(TimeSpan.FromMinutes(5))
        .Tag("products"));

IOutputCacheStore

L'invalidazione passa attraverso IOutputCacheStore. Lo inietti e chiami EvictByTagAsync per eliminare ogni voce associata a un tag.

app.MapPost("/products", async (
    Product p, AppDb db, IOutputCacheStore cache, CancellationToken ct) =>
{
    db.Products.Add(p);
    await db.SaveChangesAsync(ct);
    await cache.EvictByTagAsync("products", ct);
    return Results.Created($"/products/{p.Id}", p);
});

Perché invalidare durante le scritture

Un elenco memorizzato nella cache diventa obsoleto non appena cambiano i dati sottostanti. Rimuovere il tag pertinente a ogni operazione di creazione, aggiornamento o eliminazione mantiene aggiornate le letture senza dover attendere la scadenza.

// After any mutation:
await cache.EvictByTagAsync("products", ct);

Applicazione di tag per risorsa

Applichi i tag a un livello più preciso per rimuovere dalla cache solo le risposte relative a un elemento, anziché quelle dell'intera raccolta.

app.MapGet("/products/{id}", GetProduct)
   .CacheOutput(policy => policy.Tag("products"));
// Evict the single item's detail + the list together
await cache.EvictByTagAsync("products", ct);

Vary-By in una policy

Combini scadenza, tag e regole Vary-By in un'unica policy denominata per definire un contratto completo di caching.

options.AddPolicy("ProductList", policy => policy
    .Expire(TimeSpan.FromMinutes(5))
    .Tag("products")
    .SetVaryByQuery("page", "size"));

Valore Vary-By personalizzato

VaryByValue consente di usare dati arbitrari della richiesta come chiave della cache, ad esempio l'ID del tenant ricavato dalla richiesta.

policy.VaryByValue(context =>
    new KeyValuePair<string, string>(
        "tenant",
        context.Request.Headers["X-Tenant"].ToString()));

Rimozione e scadenza

Esistono due modi in cui le voci escono dalla cache:

  • Scadenza: basata sul tempo e automatica tramite Expire.
  • Rimozione: esplicita, tramite EvictByTagAsync quando cambiano i dati.

Utilizzi entrambi: una scadenza breve come rete di sicurezza e la rimozione per garantire la correttezza.

// belt-and-suspenders: Expire(5min) + EvictByTag on write

Blocco e protezione dal sovraccarico

Per impostazione predefinita, il caching dell'output raggruppa le richieste simultanee che trovano una cache miss: quando molte richieste raggiungono contemporaneamente un endpoint non memorizzato nella cache, solo una esegue l'handler mentre le altre attendono. È possibile disabilitare questo comportamento con SetLocking(false).

policy.SetLocking(false); // allow concurrent regeneration

Cache dell'output distribuita

Per impostazione predefinita, l'archivio risiede in memoria ed è specifico di ogni istanza. Per più server, lo supporti con un archivio distribuito (ad esempio Redis), così tutte le istanze condividono e invalidano la stessa cache.

// Register a distributed IOutputCacheStore implementation
// (e.g. a Redis-backed package) so EvictByTag works cluster-wide

Verifica rapida

Verifichi la comprensione dell'invalidazione.

Riepilogo

Ha appreso le policy della cache e l'invalidazione:

  • Definisca policy denominate riutilizzabili e le applichi tramite il nome.
  • I tag raggruppano le voci; IOutputCacheStore.EvictByTagAsync le elimina durante le scritture.
  • Combini la scadenza (automatica) con la rimozione (esplicita).
  • Utilizzi un archivio distribuito per le distribuzioni su più server.

Con questo si conclude il corso sul rate limiting e sul caching.

Domande Frequenti

La lezione «Policy e invalidazione della cache» è gratuita?

Sì — il testo completo di «Policy e invalidazione della cache» è 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 «Policy e invalidazione della cache»?

Controlli la durata della cache e i tag. 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 «Policy e invalidazione della cache»?

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. Algoritmi di limitazione della frequenza
  2. Configurazione del middleware di limitazione della frequenza
  3. Nozioni di base sull'output caching
  4. Policy e invalidazione della cache
← Torna a C# Academy