Caching in C# (.NET): Redis und andere Lösungen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Caching in C# (.NET): Redis und andere Werkzeuge zur Beschleunigung von Anwendungen



Caching ist eine der effektivsten Methoden, um die Leistung und Skalierbarkeit von Anwendungen in C# (.NET) zu verbessern. In diesem Artikel werden wir die integrierten Caching-Mechanismen, beliebte Bibliotheken für die Arbeit mit Redis sowie alternative Lösungen im Detail besprechen. Sie erfahren, wie Sie das richtige Werkzeug für Ihre Aufgabe auswählen und typische Fehler vermeiden.



Integrierte Caching-Mechanismen in .NET



Die .NET-Plattform bietet mehrere vorgefertigte Caching-Lösungen, die für die meisten Szenarien ohne Installation von Drittanbieter-Abhängigkeiten geeignet sind.



1. MemoryCache (System.Runtime.Caching)

Integrierter Cache im Arbeitsspeicher des Prozesses. Ideal für Single-Thread-Anwendungen oder geringe Lasten. Daten werden im RAM gespeichert und bei Ressourcenknappheit automatisch entfernt.



using System.Runtime.Caching;

public class MemoryCacheService{ private readonly MemoryCache _cache = MemoryCache.Default;

public T GetOrSet<T>(string key, Func<T> factory, int expirationMinutes = 5) { var cached = _cache.Get(key); if (cached != null) return (T)cached;

var result = factory(); var policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(expirationMinutes) }; _cache.Set(key, result, policy); return result; }}


2. IDistributedCache (Microsoft.Extensions.Caching)

Abstraktion für verteiltes Caching. Ermöglicht einfaches Wechseln zwischen Redis, SQL Server, NCache und anderen Anbietern. Empfohlen für Microservices und Cloud-Anwendungen.



using Microsoft.Extensions.Caching.Distributed;using System.Text.Json;

public class DistributedCacheService{ private readonly IDistributedCache _cache;

public DistributedCacheService(IDistributedCache cache) { _cache = cache; }

public async Task<T> GetOrSetAsync<T>(string key, Func<Task<T>> factory, int expirationMinutes = 10) { var cached = await _cache.GetStringAsync(key); if (cached != null) return JsonSerializer.Deserialize<T>(cached);

var result = await factory(); var options = new DistributedCacheEntryOptions { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(expirationMinutes) }; await _cache.SetStringAsync(key, JsonSerializer.Serialize(result), options); return result; }}


Redis: König des verteilten Cachings



Redis ist ein leistungsstarkes In-Memory-Datenspeichersystem, das Strings, Listen, Hashes, Sets und andere Strukturen unterstützt. Für .NET ist die Hauptbibliothek StackExchange.Redis.



Installation und Konfiguration von StackExchange.Redis

Installieren Sie das Paket über NuGet:

dotnet add package StackExchange.Redis


Beispiel für Verbindung und grundlegende Operationen:

using StackExchange.Redis;

public class RedisCacheService{ private readonly ConnectionMultiplexer _redis; private readonly IDatabase _db;

public RedisCacheService(string connectionString) { _redis = ConnectionMultiplexer.Connect(connectionString); _db = _redis.GetDatabase(); }

public async Task SetAsync(string key, string value, int expirationMinutes = 5) { await _db.StringSetAsync(key, value, TimeSpan.FromMinutes(expirationMinutes)); }

public async Task<string> GetAsync(string key) { return await _db.StringGetAsync(key); }}


Erweiterte Funktionen von Redis

  • Pub/Sub — Benachrichtigungen zwischen Diensten
  • Sorted Sets — Ranglisten und Bestenlisten

Empfehlungen