Cliente Redis para C# (.NET): StackExchange.Redis
\n\nEn 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\nStackExchange.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\nInstalación de la biblioteca
\n\nLa 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\ndotnet add package StackExchange.Redis\n\nO a través de NuGet:
\n\nInstall-Package StackExchange.Redis\n\nDespués de una instalación exitosa, aparece una referencia al ensamblado en el proyecto y se puede comenzar a trabajar con Redis.
\n\nConexión al servidor Redis
\n\nLa 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.
Ejemplo de creación de conexión:
\n\nusing 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\nLa 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\nOperaciones básicas con datos
\n\nDespués de obtener una instancia de IDatabase, se pueden realizar todas las operaciones estándar de Redis.
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\nTrabajo 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\nTrabajo 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