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 writeSperren 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 regenerationVerteiltes 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-wideKurztest
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.EvictByTagAsyncentfernt 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
- Algorithmen zur Ratenbegrenzung
- Rate-Limiting-Middleware konfigurieren
- Grundlagen des Output-Caching
- Cache-Richtlinien und Invalidierung