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.RedisBeispiel 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
Auch in der Bibliothek
ORM für C++: Vergleich und Beispiele zur Nutzung von Bibliotheken
Elasticsearch-Client für Go (Golang): Vollständige Anleitung zur Arbeit mit ES
E-Mail-Versand mit JavaScript (Node.js): nodemailer, sendgrid, mailgun
QR-Code-Generator in Go (Golang) mit der Bibliothek go-qrcode