Redis-Client für C# (.NET): StackExchange.Redis — Verbindung und Beispiele

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

Redis-Client für C# (.NET): StackExchange.Redis

\n\n

In 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\n

Was ist StackExchange.Redis?

\n\n

StackExchange.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\n

Installation der Bibliothek

\n\n

Die 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\n
dotnet add package StackExchange.Redis
\n\n

Oder über NuGet:

\n\n
Install-Package StackExchange.Redis
\n\n

Nach erfolgreicher Installation erscheint im Projekt ein Verweis auf die Assembly, und die Arbeit mit Redis kann beginnen.

\n\n

Verbindung zum Redis-Server

\n\n

Die Hauptklasse für die Interaktion ist ConnectionMultiplexer. Sie verwaltet die Verbindungen zu Redis und behandelt automatisch Wiederverbindungen, Netzwerkfehler und das Umschalten auf Replikate.

\n\n

Beispiel für das Erstellen einer Verbindung:

\n\n
using 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\n

Die 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\n

Grundlegende Datenoperationen

\n\n

Nachdem Sie eine Instanz von IDatabase erhalten haben, können Sie alle Standard-Redis-Operationen ausführen.

\n\n

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\n

Arbeit 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\n

Arbeit 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                    

Empfehlungen