C# Academy · Les

Cachebeleid en invalidatie

Beheer de levensduur en tags van de cache.

Les 4 van 413 stappen

Cachebeleid en invalidatie is een gratis C# Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 4 lessen.

Beleid met een naam

In plaats van cache-instellingen op elk endpoint te herhalen, definieer je herbruikbaar beleid met een naam één keer en verwijs je er op naam naar.

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

Een benoemd beleid toepassen

Verwijs bij het cachen van een endpoint naar het beleid met zijn naam.

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

Cachtags

Tags groeperen verwante gecachete items, zodat je ze samen ongeldig kunt maken. Voorzie een endpoint in zijn beleid van een tag met Tag.

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

IOutputCacheStore

Het ongeldig maken verloopt via IOutputCacheStore. Injecteer dit en roep EvictByTagAsync aan om elk item met die tag uit de cache te verwijderen.

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

Waarom je bij schrijfbewerkingen ongeldig moet maken

Een gecachete lijst is verouderd zodra de onderliggende gegevens veranderen. Door bij elke aanmaak-, bijwerk- of verwijderbewerking de relevante tag te verwijderen, blijven leesbewerkingen actueel zonder op het verlopen van de vervaltijd te wachten.

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

Tags per object instellen

Stel tags gedetailleerder in, zodat je alleen de gecachete antwoorden van één item verwijdert en niet de hele verzameling.

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

Variatie-instellingen in een beleid

Combineer vervaltijd, tags en variatieregels in één benoemd beleid voor een volledig cachecontract.

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

Aangepaste variatiewaarde

Met VaryByValue kun je de cachesleutel baseren op willekeurige aanvraaggegevens, zoals een tenant-id die uit de aanvraag wordt bepaald.

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

Verwijdering versus vervaltijd

Er zijn twee manieren waarop items de cache verlaten:

  • Vervaltijd: gebaseerd op tijd en automatisch via Expire.
  • Verwijdering: expliciet via EvictByTagAsync wanneer gegevens veranderen.

Gebruik beide: een korte vervaltijd als vangnet en verwijdering voor correctheid.

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

Vergrendeling en bescherming tegen cachestormen

Uitvoercaching voegt gelijktijdige cachemissers standaard samen: wanneer veel aanvragen tegelijk een endpoint zonder cache bereiken, voert slechts één aanvraag de handler uit terwijl de andere wachten. Je kunt dit uitschakelen met SetLocking(false).

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

Gedistribueerde uitvoercache

Standaard bevindt de opslag zich in het geheugen en is deze per instantie. Gebruik voor meerdere servers een gedistribueerde opslag, zoals Redis, zodat alle instanties dezelfde cache delen en ongeldig maken.

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

Korte controle

Test je begrip van het ongeldig maken.

Samenvatting

Je hebt cachebeleid en het ongeldig maken geleerd:

  • Definieer herbruikbaar beleid met een naam en pas het op naam toe.
  • Tags groeperen items; IOutputCacheStore.EvictByTagAsync verwijdert ze bij schrijfbewerkingen.
  • Combineer vervaltijd (automatisch) met verwijdering (expliciet).
  • Gebruik een gedistribueerde opslag voor implementaties met meerdere servers.

Daarmee is de cursus over snelheidsbegrenzing en caching voltooid.

Gratis beginnen

Leer C# met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
93
Lessen
346

Veelgestelde vragen

Is de les “Cachebeleid en invalidatie” gratis?

Ja — de volledige tekst van “Cachebeleid en invalidatie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 4 lessen.

Wat leer ik in “Cachebeleid en invalidatie”?

Beheer de levensduur en tags van de cache. Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C# Academy te beginnen?

Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Cachebeleid en invalidatie”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C# Academy?

Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Algoritmen voor rate limiting
  2. Rate-limitingmiddleware configureren
  3. Basis van outputcaching
  4. Cachebeleid en invalidatie
← Terug naar C# Academy