0Pricing
C# Academy · Lektion

Cache-Richtlinien und Invalidierung

Steuern Sie Cache-Lebensdauer und Tags.

Cache-Richtlinien und Invalidierung ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Benannte Richtlinien

Anstatt die Cache-Einstellungen für jeden Endpunkt zu wiederholen, definieren Sie einmalig wiederverwendbare benannte Richtlinien und verweisen anschließend über ihren Namen darauf.

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

Eine benannte Richtlinie anwenden

Verweisen Sie beim Caching eines Endpunkts über den Namen auf die Richtlinie.

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

Cache-Tags

Tags gruppieren zusammengehörige Cache-Einträge, sodass Sie sie gemeinsam entfernen können. Versehen Sie einen Endpunkt in seiner Richtlinie mit Tag mit einem Tag.

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

IOutputCacheStore

Das Entfernen von Einträgen erfolgt über IOutputCacheStore. Injizieren Sie ihn und rufen Sie EvictByTagAsync auf, um alle Einträge mit einem bestimmten Tag zu entfernen.

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

Warum Schreibvorgänge eine Entfernung erfordern

Eine gecachte Liste wird in dem Moment veraltet, in dem sich die zugrunde liegenden Daten ändern. Wenn Sie das relevante Tag bei jedem Erstellen, Aktualisieren oder Löschen entfernen, bleiben Lesevorgänge aktuell, ohne auf den Ablauf warten zu müssen.

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

Nach Ressource taggen

Verwenden Sie Tags auf einer feineren Ebene, um nur die gecachten Antworten eines einzelnen Elements zu entfernen, nicht die gesamte Sammlung.

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 einer Richtlinie

Kombinieren Sie Ablauf, Tags und Vary-By-Regeln in einer benannten Richtlinie zu einer vollständigen Caching-Vereinbarung.

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

Benutzerdefinierter Vary-By-Wert

VaryByValue ermöglicht es Ihnen, den Cache anhand beliebiger Anfragedaten zu indizieren, beispielsweise anhand einer aus der Anfrage ermittelten Mandanten-ID.

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

Entfernung und Ablauf

Es gibt zwei Möglichkeiten, wie Einträge den Cache verlassen:

  • Ablauf: zeitbasiert und automatisch über Expire.
  • Entfernung: explizit über EvictByTagAsync, wenn sich Daten ändern.

Verwenden Sie beides: einen kurzen Ablauf als Sicherheitsnetz und die Entfernung für korrekte Daten.

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

Sperren und Schutz vor Anfragestürmen

Das Output-Caching bündelt standardmäßig gleichzeitig auftretende Cache-Fehlversuche: Wenn viele Anfragen gleichzeitig einen nicht gecachten Endpunkt erreichen, führt nur eine den Handler aus, während die übrigen warten. Mit SetLocking(false) können Sie dieses Verhalten deaktivieren.

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

Verteiltes Output-Caching

Standardmäßig befindet sich der Store im Arbeitsspeicher und ist auf eine Instanz beschränkt. Bei mehreren Servern hinterlegen Sie ihn in einem verteilten Store (z. B. Redis), damit alle Instanzen denselben Cache gemeinsam nutzen und Einträge daraus entfernen können.

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

Kurztest

Testen Sie Ihr Verständnis der Entfernung von Cache-Einträgen.

Zusammenfassung

Sie haben Cache-Richtlinien und das Entfernen von Einträgen gelernt:

  • Definieren Sie wiederverwendbare benannte Richtlinien und wenden Sie sie über ihren Namen an.
  • Tags gruppieren Einträge; IOutputCacheStore.EvictByTagAsync entfernt sie bei Schreibvorgängen.
  • Kombinieren Sie den Ablauf (automatisch) mit der Entfernung (explizit).
  • Verwenden Sie für Bereitstellungen mit mehreren Servern einen verteilten Store.

Damit ist der Kurs zu Ratenbegrenzung und Caching abgeschlossen.

Häufig gestellte Fragen

Ist die Lektion „Cache-Richtlinien und Invalidierung“ kostenlos?

Ja — der vollständige Text von „Cache-Richtlinien und Invalidierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Cache-Richtlinien und Invalidierung“?

Steuern Sie Cache-Lebensdauer und Tags. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Cache-Richtlinien und Invalidierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Algorithmen zur Ratenbegrenzung
  2. Rate-Limiting-Middleware konfigurieren
  3. Grundlagen des Output-Caching
  4. Cache-Richtlinien und Invalidierung
← Zurück zu C# Academy