C# Academy · Lektion

Abstraktionen IDistributedCache

Cache data på tværs af flere servere.

Lektion 1 af 413 trin

Abstraktionen IDistributedCache er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 4 lektioner i alt.

Hvorfor distribueret cachelagring?

En cache i hukommelsen findes i én enkelt proces, så den går tabt ved genstart og deles ikke mellem servere. En distribueret cache findes i et eksternt lager, f.eks. Redis, som alle instanser af din app kan læse fra og skrive til. Det gør cachelagringen ensartet i en vandret skaleret udrulning.

IDistributedCache-grænsefladen

ASP.NET Core abstraherer distribueret cachelagring bag IDistributedCache i Microsoft.Extensions.Caching.Distributed. Din kode afhænger af denne grænseflade, ikke direkte af Redis, så du kan skifte implementering.

public interface IDistributedCache
{
    byte[] Get(string key);
    Task<byte[]> GetAsync(string key, CancellationToken token = default);
    void Set(string key, byte[] value, DistributedCacheEntryOptions options);
    void Remove(string key);
    void Refresh(string key);
}

Den gemmer bytes

Læg mærke til, at cachen gemmer byte[]. Hvis du vil cachelagre strenge eller objekter, skal du først serialisere dem. Der findes praktiske strengudvidelsesmetoder til det almindelige tilfælde.

using Microsoft.Extensions.Caching.Distributed;

await cache.SetStringAsync("greeting", "Hello, world");
string value = await cache.GetStringAsync("greeting");

Injektion af cachen

Anmod om IDistributedCache via konstruktørinjektion ligesom enhver anden tjeneste.

public class WeatherService
{
    private readonly IDistributedCache _cache;
    public WeatherService(IDistributedCache cache)
    {
        _cache = cache;
    }
}

Læsning fra cachen

GetStringAsync returnerer null, når nøglen mangler eller er udløbet. Håndter altid situationen, hvor cachen ikke indeholder værdien.

string cached = await _cache.GetStringAsync("forecast:istanbul");
if (cached is null)
{
    // cache miss: load from source
}

Skrivning til cachen

SetStringAsync gemmer en værdi med valgfri udløbsindstillinger, som gennemgås i en senere lektion.

await _cache.SetStringAsync(
    "forecast:istanbul",
    "22C sunny",
    new DistributedCacheEntryOptions
    {
        AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
    });

Fjernelse og opdatering

RemoveAsync fjerner en nøgle fra cachen, for eksempel når de underliggende data ændres. RefreshAsync nulstiller et glidende udløb uden at ændre værdien.

await _cache.RemoveAsync("forecast:istanbul");
await _cache.RefreshAsync("session:abc123");

Implementeringen i hukommelsen

Til udvikling eller test skal du registrere den distribuerede cache i hukommelsen. Den implementerer den samme grænseflade, så din kode er identisk, men data deles ikke faktisk mellem processer.

builder.Services.AddDistributedMemoryCache();

Udbyderuafhængig kode

Fordi du kun afhænger af IDistributedCache, kræver et skift fra udbyderen i hukommelsen til Redis eller SQL Server kun en ændring på én registreringslinje, uden kodeændringer i dine tjenester.

Navngivningskonventioner for nøgler

Brug strukturerede nøgler med navnerum som entity:id:field, for eksempel user:42:profile. Tydelige konventioner forhindrer nøglekollisioner og gør ugyldiggørelse af cacheindhold forudsigelig.

string key = $"user:{userId}:profile";

Hvornår du ikke skal cachelagre

Cachelagr data, der læses ofte og ændres sjældent. Meget omskiftelige eller brugerspecifikke følsomme data er måske ikke egnede, og risikoen for forældede data skal altid vejes op mod ydeevnegevinster.

Hurtigt tjek

Test IDistributedCache-abstraktionen.

Opsummering

IDistributedCache abstraherer en ekstern, delt cache, så alle applikationsinstanser ser de samme data. Den gemmer byte[] og har GetStringAsync/SetStringAsync til strenge samt RemoveAsync og RefreshAsync. Når koden afhænger af grænsefladen, er den udbyderuafhængig og kan skifte mellem AddDistributedMemoryCache og Redis med én linje. Brug tydelige nøgler med navnerum.

Gratis at komme i gang

Lær C# med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
93
Lektioner
346

Ofte stillede spørgsmål

Er lektionen “Abstraktionen IDistributedCache” gratis?

Ja — hele teksten til “Abstraktionen IDistributedCache” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Abstraktionen IDistributedCache”?

Cache data på tværs af flere servere. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C# Academy?

Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Abstraktionen IDistributedCache”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C# Academy-lektion?

Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Abstraktionen IDistributedCache
  2. Forbindelse til Redis
  3. Cachemønstre og udløb
  4. Caching af serialiserede objekter
← Tilbage til C# Academy