Cliente Redis para C# (.NET): StackExchange.Redis
En el desarrollo moderno en la plataforma .NET, a menudo surge la necesidad de un almacenamiento en caché rápido de datos, organización de colas de mensajes o gestión de sesiones. Una de las mejores soluciones para estas tareas es el uso de Redis, un almacén de datos de tipo "clave-valor" de alto rendimiento. Para interactuar con Redis desde C# (.NET), la biblioteca más popular y confiable es StackExchange.Redis.
¿Qué es StackExchange.Redis?
StackExchange.Redis es una biblioteca cliente de código abierto desarrollada por la empresa Stack Overflow. Proporciona un conjunto completo de funciones para trabajar con Redis: desde operaciones simples GET/SET hasta escenarios complejos con publicación/suscripción (Pub/Sub), transacciones y scripts Lua. La biblioteca está optimizada para aplicaciones multiproceso y admite operaciones asíncronas, lo que la convierte en una opción ideal para servicios de alta carga en C#.
Instalación
Puede instalar la biblioteca a través del Administrador de paquetes NuGet. Ejecute el comando en la consola del administrador de paquetes:
Install-Package StackExchange.RedisO a través de .NET CLI:
dotnet add package StackExchange.RedisDespués de la instalación, puede conectarse al servidor Redis utilizando la cadena de conexión:
using StackExchange.Redis;
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379");IDatabase db = redis.GetDatabase();Funcionalidades principales y ejemplos de código
1. Operaciones básicas con claves
El escenario más común es guardar y obtener valores. Ejemplo de trabajo con cadenas:
// Escritura de datosdb.StringSet("user:1:name", "Alejandro");db.StringSet("user:1:email", "alex@example.com");
// Lectura de datosstring name = db.StringGet("user:1:name");string email = db.StringGet("user:1:email");
Console.WriteLine($"Nombre: {name}, Email: {email}");2. Trabajo con hashes
Redis admite la estructura de datos "hash", que es conveniente para almacenar objetos:
// Escritura de hashHashEntry[] user = new HashEntry[]{ new HashEntry("name", "María"), new HashEntry("age", 28), new HashEntry("city", "Madrid")};db.HashSet("user:2", user);
// Lectura de todos los camposHashEntry[] loadedUser = db.HashGetAll("user:2");foreach (var entry in loadedUser){ Console.WriteLine($"{entry.Name}: {entry.Value}");}3. Almacenamiento en caché con tiempo de vida
Una de las funciones clave de Redis es la eliminación automática de datos obsoletos. Establezca un TTL (Time To Live) para la clave:
// Almacenamos en caché los datos por 10 minutosdb.StringSet("cache:weather", "soleado, +22°C", TimeSpan.FromMinutes(10));
// Verificamos el tiempo de vidaTimeSpan? ttl = db.KeyTimeToLive("cache:weather");Console.WriteLine($"Restante: {ttl?.TotalSeconds} segundos");4. Publicación y suscripción (Pub/Sub)
Implemente el intercambio de mensajes en tiempo real. Ejemplo de suscriptor:
// Creamos un suscriptorISubscriber subscriber = redis.GetSubscriber();subscriber.Subscribe("notifications", (channel, message) =>{ Console.WriteLine($"Notificación recibida: {message}");});
// Publicamos un mensajesubscriber.Publish("notifications", "¡Hola, mundo!");5. Transacciones
Ejecución de múltiples operaciones de forma atómica:
ITransaction transaction = db.CreateTransaction();transaction.AddCondition(Condition.KeyNotExists("counter:lock"));transaction.StringSetAsync("counter:lock", "1");transaction.StringIncrementAsync("counter:value");
// Confirmamos la transacciónbool committed = transaction.Execute();Console.WriteLine(committed ? "Transacción ejecutada" : "Rechazada");Ventajas de StackExchange.Redis
- Alto rendimiento
También en la biblioteca
Rate Limiting en PHP: Limitación de frecuencia de solicitudes para proteger el sitio
Vavr Java: Guía completa con ejemplos prácticos
rustls para Rust: guía completa con ejemplos prácticos
Event Bus y el patrón Observer en TypeScript: implementación y ejemplos