Cliente Redis para C# (.NET): StackExchange.Redis — conexión y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente Redis para C# (.NET): StackExchange.Redis

\n\n

En el desarrollo moderno en la plataforma .NET, a menudo surge la necesidad de utilizar sistemas de caché de alto rendimiento y brokers de mensajes. Una de las soluciones más populares es Redis, un almacén de datos en memoria que funciona bajo el principio de «clave-valor». Para interactuar con Redis desde C# (.NET), existe una biblioteca probada y potente llamada StackExchange.Redis. Fue desarrollada por la empresa Stack Exchange (creadores de Stack Overflow) y soporta todas las funcionalidades principales de Redis, incluyendo clustering, replicación y Pub/Sub.

\n\n

¿Qué es StackExchange.Redis?

\n\n

StackExchange.Redis es un cliente asíncrono de alto rendimiento para Redis, escrito en C#. La biblioteca está optimizada para trabajar con una gran cantidad de conexiones simultáneas y soporta multiplexación: una sola conexión puede atender múltiples solicitudes paralelas sin bloqueos. Esto la convierte en una opción ideal para aplicaciones de alta carga en .NET Core, .NET 5/6/7/8 y .NET Framework.

\n\n

Instalación de la biblioteca

\n\n

La instalación de StackExchange.Redis se realiza a través del Administrador de paquetes NuGet. La forma más sencilla es usar la consola del administrador de paquetes en Visual Studio o la CLI de dotnet.

\n\n
dotnet add package StackExchange.Redis
\n\n

O a través de NuGet:

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

Después de una instalación exitosa, aparece una referencia al ensamblado en el proyecto y se puede comenzar a trabajar con Redis.

\n\n

Conexión al servidor Redis

\n\n

La clase principal para la interacción es ConnectionMultiplexer. Gestiona las conexiones a Redis y maneja automáticamente las reconexiones, errores de red y la conmutación a réplicas.

\n\n

Ejemplo de creación de conexión:

\n\n
using StackExchange.Redis;\n\nclass Program\n{\n    static async Task Main(string[] args)\n    {\n        // Cadena de conexión a Redis local\n        string connectionString = "localhost:6379";\n        \n        // Creación del multiplexor\n        using var redis = await ConnectionMultiplexer.ConnectAsync(connectionString);\n        \n        // Obtención de la base de datos (por defecto db=0)\n        IDatabase db = redis.GetDatabase();\n        \n        // Verificación de la conexión\n        bool isConnected = db.Ping().TotalSeconds < 2;\n        Console.WriteLine($"Connected: {isConnected}");\n    }\n}
\n\n

La cadena de conexión puede incluir contraseña, puerto, parámetros SSL y otras opciones. Por ejemplo, para conectarse a Redis en un servidor remoto con contraseña:

\n\n
"myredis.cloud.com:6380,password=secret123,ssl=true"
\n\n

Operaciones básicas con datos

\n\n

Después de obtener una instancia de IDatabase, se pueden realizar todas las operaciones estándar de Redis.

\n\n

Trabajo con strings

\n\n
// Escritura de un string\nawait db.StringSetAsync("user:1:name", "Alejandro");\n\n// Lectura de un string\nstring name = await db.StringGetAsync("user:1:name");\nConsole.WriteLine(name); // Muestra: Alejandro\n\n// Incremento de un contador\nawait db.StringIncrementAsync("page:visits", 1);
\n\n

Trabajo con hashes

\n\n
// Establecer campos de un hash\nHashEntry[] userData = {\n    new HashEntry("name", "María"),\n    new HashEntry("age", 28),\n    new HashEntry("city", "Madrid")\n};\nawait db.HashSetAsync("user:2", userData);\n\n// Obtener un campo\nstring city = await db.HashGetAsync("user:2", "city");\nConsole.WriteLine(city); // Madrid\n\n// Obtener todos los campos del hash\nvar allFields = await db.HashGetAllAsync("user:2");\nforeach (var field in allFields)\n{\n    Console.WriteLine($"{field.Name}: {field.Value}");\n}
\n\n

Trabajo con listas

\n\n
// Agregar elementos a la lista (por la izquierda)\nawait db.ListLeftPushAsync("notifications", "Primera notificación");\nawait db.ListLeftPushAsync("notifications", "Segunda notificación");\n\n// Obtener todos los elementos de la lista\nvar                    

Recommendations