Redis-Client für C# (.NET): StackExchange.Redis
\n\nIn der modernen Entwicklung auf der .NET-Plattform besteht häufig die Notwendigkeit, leistungsstarke Caching-Systeme und Message Broker einzusetzen. Eine der beliebtesten Lösungen ist Redis – ein In-Memory-Datenspeicher, der nach dem Schlüssel-Wert-Prinzip arbeitet. Für die Interaktion mit Redis aus C# (.NET) gibt es die bewährte und leistungsstarke Bibliothek StackExchange.Redis. Sie wurde von der Firma Stack Exchange (Entwickler von Stack Overflow) entwickelt und unterstützt alle wesentlichen Redis-Funktionen, einschließlich Clustering, Replikation und Pub/Sub.
\n\nWas ist StackExchange.Redis?
\n\nStackExchange.Redis ist ein leistungsstarker, asynchroner Client für Redis, geschrieben in C#. Die Bibliothek ist für die Arbeit mit einer großen Anzahl gleichzeitiger Verbindungen optimiert und unterstützt Multiplexing – eine einzige Verbindung kann viele parallele Anfragen ohne Blockierung bedienen. Dies macht sie zur idealen Wahl für hochbelastete Anwendungen auf .NET Core, .NET 5/6/7/8 und .NET Framework.
\n\nInstallation der Bibliothek
\n\nDie Installation von StackExchange.Redis erfolgt über den NuGet Package Manager. Der einfachste Weg ist die Verwendung der Paketmanager-Konsole in Visual Studio oder der dotnet CLI.
\n\ndotnet add package StackExchange.Redis\n\nOder über NuGet:
\n\nInstall-Package StackExchange.Redis\n\nNach erfolgreicher Installation erscheint im Projekt ein Verweis auf die Assembly, und die Arbeit mit Redis kann beginnen.
\n\nVerbindung zum Redis-Server
\n\nDie Hauptklasse für die Interaktion ist ConnectionMultiplexer. Sie verwaltet die Verbindungen zu Redis und behandelt automatisch Wiederverbindungen, Netzwerkfehler und das Umschalten auf Replikate.
Beispiel für das Erstellen einer Verbindung:
\n\nusing StackExchange.Redis;\n\nclass Program\n{\n static async Task Main(string[] args)\n {\n // Verbindungszeichenfolge zum lokalen Redis\n string connectionString = "localhost:6379";\n \n // Erstellen des Multiplexers\n using var redis = await ConnectionMultiplexer.ConnectAsync(connectionString);\n \n // Abrufen der Datenbank (standardmäßig db=0)\n IDatabase db = redis.GetDatabase();\n \n // Überprüfen der Verbindung\n bool isConnected = db.Ping().TotalSeconds < 2;\n Console.WriteLine($"Connected: {isConnected}");\n }\n}\n\nDie Verbindungszeichenfolge kann ein Passwort, einen Port, SSL-Parameter und andere Optionen enthalten. Zum Beispiel für die Verbindung zu einem entfernten Redis-Server mit Passwort:
\n\n"myredis.cloud.com:6380,password=secret123,ssl=true"\n\nGrundlegende Datenoperationen
\n\nNachdem Sie eine Instanz von IDatabase erhalten haben, können Sie alle Standard-Redis-Operationen ausführen.
Arbeit mit Strings
\n\n// String schreiben\nawait db.StringSetAsync("user:1:name", "Alexej");\n\n// String lesen\nstring name = await db.StringGetAsync("user:1:name");\nConsole.WriteLine(name); // Gibt aus: Alexej\n\n// Zähler erhöhen\nawait db.StringIncrementAsync("page:visits", 1);\n\nArbeit mit Hashes
\n\n// Hash-Felder setzen\nHashEntry[] userData = {\n new HashEntry("name", "Maria"),\n new HashEntry("age", 28),\n new HashEntry("city", "Moskau")\n};\nawait db.HashSetAsync("user:2", userData);\n\n// Ein einzelnes Feld abrufen\nstring city = await db.HashGetAsync("user:2", "city");\nConsole.WriteLine(city); // Moskau\n\n// Alle Felder eines Hashes abrufen\nvar allFields = await db.HashGetAllAsync("user:2");\nforeach (var field in allFields)\n{\n Console.WriteLine($"{field.Name}: {field.Value}");\n}\n\nArbeit mit Listen
\n\n// Elemente zur Liste hinzufügen (von links)\nawait db.ListLeftPushAsync("notifications", "Erste Benachrichtigung");\nawait db.ListLeftPushAsync("notifications", "Zweite Benachrichtigung");\n\n// Alle Elemente der Liste abrufen\nvar