IDistributedCache-Abstraktion
Puffern Sie Daten über mehrere Server hinweg.
IDistributedCache-Abstraktion ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Warum verteiltes Caching?
Ein In-Memory-Cache befindet sich innerhalb eines einzelnen Prozesses. Daher geht er bei einem Neustart verloren und wird nicht zwischen Servern geteilt. Ein verteilter Cache befindet sich in einem externen Speicher wie Redis, aus dem jede Instanz Ihrer Anwendung lesen und in den sie schreiben kann. Dadurch bleibt das Caching in einer skalierten Bereitstellung konsistent.
Die IDistributedCache-Schnittstelle
ASP.NET Core abstrahiert verteiltes Caching über IDistributedCache in Microsoft.Extensions.Caching.Distributed. Ihr Code hängt von dieser Schnittstelle ab, nicht direkt von Redis, sodass Sie Implementierungen austauschen können.
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);
}Es speichert Bytes
Beachten Sie, dass der Cache byte[] speichert. Um Strings oder Objekte zu cachen, müssen Sie sie zuerst serialisieren. Für den häufigsten Anwendungsfall gibt es praktische String-Erweiterungsmethoden.
using Microsoft.Extensions.Caching.Distributed;
await cache.SetStringAsync("greeting", "Hello, world");
string value = await cache.GetStringAsync("greeting");Den Cache injizieren
Fordern Sie IDistributedCache wie jeden anderen Dienst per Konstruktorinjektion an.
public class WeatherService
{
private readonly IDistributedCache _cache;
public WeatherService(IDistributedCache cache)
{
_cache = cache;
}
}Aus dem Cache lesen
GetStringAsync gibt null zurück, wenn der Schlüssel nicht vorhanden oder abgelaufen ist. Behandeln Sie den Fall eines Cache-Misses immer.
string cached = await _cache.GetStringAsync("forecast:istanbul");
if (cached is null)
{
// cache miss: load from source
}In den Cache schreiben
SetStringAsync speichert einen Wert mit optionalen Ablaufoptionen, die in einer späteren Lektion behandelt werden.
await _cache.SetStringAsync(
"forecast:istanbul",
"22C sunny",
new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
});Entfernen und Aktualisieren
RemoveAsync entfernt einen Schlüssel aus dem Cache, beispielsweise wenn sich die zugrunde liegenden Daten ändern. RefreshAsync setzt eine gleitende Ablaufzeit zurück, ohne den Wert zu ändern.
await _cache.RemoveAsync("forecast:istanbul");
await _cache.RefreshAsync("session:abc123");Die In-Memory-Implementierung
Für die Entwicklung oder für Tests können Sie den verteilten In-Memory-Cache registrieren. Er implementiert dieselbe Schnittstelle, sodass Ihr Code identisch bleibt. Die Daten werden jedoch nicht tatsächlich zwischen Prozessen gemeinsam genutzt.
builder.Services.AddDistributedMemoryCache();Anbieterunabhängiger Code
Da Sie nur von IDistributedCache abhängen, ist der Wechsel vom In-Memory-Anbieter zu Redis oder SQL Server eine einzeilige Änderung der Registrierung. An Ihrem Service-Code müssen Sie nichts ändern.
Konventionen für die Benennung von Schlüsseln
Verwenden Sie strukturierte Schlüssel mit Namensräumen wie entity:id:field, zum Beispiel user:42:profile. Klare Konventionen verhindern Kollisionen und machen die Cache-Invalidierung vorhersehbar.
string key = $"user:{userId}:profile";Wann Sie nicht cachen sollten
Cache-Daten, die häufig gelesen werden und sich selten ändern. Daten mit hoher Änderungsfrequenz oder sensible benutzerspezifische Daten eignen sich möglicherweise nicht dafür. Die Risiken veralteter Daten müssen Sie immer gegen die Performancegewinne abwägen.
Kurze Überprüfung
Testen Sie die Abstraktion IDistributedCache.
Zusammenfassung
IDistributedCache abstrahiert einen externen, gemeinsam genutzten Cache, sodass jede Anwendungsinstanz dieselben Daten sieht. Er speichert byte[] und bietet für Strings GetStringAsync/SetStringAsync sowie RemoveAsync und RefreshAsync. Wenn Sie von der Schnittstelle abhängen, bleibt Ihr Code anbieterunabhängig. Sie können zwischen AddDistributedMemoryCache und Redis mit einer einzigen Zeile wechseln. Verwenden Sie klare Schlüssel mit Namensräumen.
Häufig gestellte Fragen
Ist die Lektion „IDistributedCache-Abstraktion“ kostenlos?
Ja — der vollständige Text von „IDistributedCache-Abstraktion“ 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 „IDistributedCache-Abstraktion“?
Puffern Sie Daten über mehrere Server hinweg. 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 1 von 4.
Wie lange dauert die Lektion „IDistributedCache-Abstraktion“?
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
- IDistributedCache-Abstraktion
- Mit Redis verbinden
- Cache-Muster und Ablauf
- Serialisierte Objekte cachen