Cache mit zwei Ebenen

Cache mit zwei Ebenen

- Matt

IMemoryCache reicht, solange eine Instanz läuft. Bei mehreren braucht es einen verteilten Cache, und dann will man beides.

builder.Services.AddHybridCache();

var wert = await cache.GetOrCreateAsync(
    $"kunde:{id}",
    async ct => await _repo.Laden(id, ct),
    cancellationToken: token);

HybridCache fragt zuerst den Speicher, dann den verteilten Cache und ruft erst dann die Fabrikmethode auf.

Der wichtigste Teil steckt im Namen GetOrCreate: Treffen hundert Anfragen gleichzeitig auf einen abgelaufenen Eintrag, läuft die Fabrikmethode genau einmal. Bei einer selbstgebauten Lösung mit TryGetValue und anschließendem Set laufen alle hundert los, und genau das bringt die Datenbank an der Stelle um, an der der Cache eigentlich helfen sollte.