Cliente Redis para C# (.NET): StackExchange.Redis
No desenvolvimento moderno na plataforma .NET, surge frequentemente a necessidade de cache rápido de dados, organização de filas de mensagens ou gerenciamento de sessões. Uma das melhores soluções para essas tarefas é o uso do Redis — um armazenamento de dados do tipo "chave-valor" de alto desempenho. Para interagir com o Redis a partir do C# (.NET), a biblioteca mais popular e confiável é o StackExchange.Redis.
O que é StackExchange.Redis?
StackExchange.Redis é uma biblioteca cliente de código aberto, desenvolvida pela empresa Stack Overflow. Ela fornece um conjunto completo de funções para trabalhar com Redis: desde operações simples GET/SET até cenários complexos com publicação/assinatura (Pub/Sub), transações e scripts Lua. A biblioteca é otimizada para aplicações multithread e suporta operações assíncronas, tornando-a a escolha ideal para serviços de alta carga em C#.
Instalação
Você pode instalar a biblioteca através do NuGet Package Manager. Execute o comando no console do gerenciador de pacotes:
Install-Package StackExchange.RedisOu através do .NET CLI:
dotnet add package StackExchange.RedisApós a instalação, você pode conectar-se ao servidor Redis usando uma string de conexão:
using StackExchange.Redis;
ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379");IDatabase db = redis.GetDatabase();Principais recursos e exemplos de código
1. Operações básicas com chaves
O cenário mais comum é salvar e obter valores. Exemplo de trabalho com strings:
// Gravação de dadosdb.StringSet("user:1:name", "Alexey");db.StringSet("user:1:email", "alex@example.com");
// Leitura de dadosstring name = db.StringGet("user:1:name");string email = db.StringGet("user:1:email");
Console.WriteLine($"Nome: {name}, Email: {email}");2. Trabalho com hashes
O Redis suporta a estrutura de dados "hash", que é conveniente para armazenar objetos:
// Gravação de hashHashEntry[] user = new HashEntry[]{ new HashEntry("name", "Maria"), new HashEntry("age", 28), new HashEntry("city", "Moscou")};db.HashSet("user:2", user);
// Leitura de todos os camposHashEntry[] loadedUser = db.HashGetAll("user:2");foreach (var entry in loadedUser){ Console.WriteLine($"{entry.Name}: {entry.Value}");}3. Cache com tempo de vida
Uma das principais funções do Redis é a remoção automática de dados obsoletos. Defina um TTL (Time To Live) para a chave:
// Armazenamos dados em cache por 10 minutosdb.StringSet("cache:weather", "ensolarado, +22°C", TimeSpan.FromMinutes(10));
// Verificamos o tempo de vidaTimeSpan? ttl = db.KeyTimeToLive("cache:weather");Console.WriteLine($"Restante: {ttl?.TotalSeconds} segundos");4. Publicação e assinatura (Pub/Sub)
Implemente troca de mensagens em tempo real. Exemplo de assinante:
// Criamos um assinanteISubscriber subscriber = redis.GetSubscriber();subscriber.Subscribe("notifications", (channel, message) =>{ Console.WriteLine($"Notificação recebida: {message}");});
// Publicamos uma mensagemsubscriber.Publish("notifications", "Olá, mundo!");5. Transações
Execução de várias operações atomicamente:
ITransaction transaction = db.CreateTransaction();transaction.AddCondition(Condition.KeyNotExists("counter:lock"));transaction.StringSetAsync("counter:lock", "1");transaction.StringIncrementAsync("counter:value");
// Confirmamos a transaçãobool committed = transaction.Execute();Console.WriteLine(committed ? "Transação executada" : "Recusada");Vantagens do StackExchange.Redis
- Alto desempenho