Cliente Redis para C# (.NET): StackExchange.Redis — conexão e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

\n\n

No desenvolvimento moderno na plataforma .NET, surge frequentemente a necessidade de usar sistemas de cache de alto desempenho e corretores de mensagens. Uma das soluções mais populares é o Redis — um armazenamento de dados in-memory que opera no princípio de "chave-valor". Para interagir com o Redis a partir do C# (.NET), existe uma biblioteca robusta e testada chamada StackExchange.Redis. Ela foi desenvolvida pela empresa Stack Exchange (criadores do Stack Overflow) e suporta todos os principais recursos do Redis, incluindo clusterização, replicação e Pub/Sub.

\n\n

O que é StackExchange.Redis?

\n\n

StackExchange.Redis é um cliente assíncrono de alto desempenho para Redis, escrito em C#. A biblioteca é otimizada para trabalhar com um grande número de conexões simultâneas e suporta multiplexação — uma única conexão pode atender a várias requisições paralelas sem bloqueios. Isso a torna a escolha ideal para aplicações de alta carga em .NET Core, .NET 5/6/7/8 e .NET Framework.

\n\n

Instalação da biblioteca

\n\n

A instalação do StackExchange.Redis é feita através do NuGet Package Manager. A maneira mais simples é usar o console do gerenciador de pacotes no Visual Studio ou o dotnet CLI.

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

Ou via NuGet:

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

Após a instalação bem-sucedida, uma referência ao assembly é adicionada ao projeto e você pode começar a trabalhar com o Redis.

\n\n

Conexão ao servidor Redis

\n\n

A classe principal para interação é ConnectionMultiplexer. Ela gerencia as conexões com o Redis e lida automaticamente com reconexões, erros de rede e failover para réplicas.

\n\n

Exemplo de criação de conexão:

\n\n
using StackExchange.Redis;\n\nclass Program\n{\n    static async Task Main(string[] args)\n    {\n        // String de conexão para o Redis local\n        string connectionString = "localhost:6379";\n        \n        // Criando o multiplexador\n        using var redis = await ConnectionMultiplexer.ConnectAsync(connectionString);\n        \n        // Obtendo o banco de dados (por padrão db=0)\n        IDatabase db = redis.GetDatabase();\n        \n        // Verificando a conexão\n        bool isConnected = db.Ping().TotalSeconds < 2;\n        Console.WriteLine($"Connected: {isConnected}");\n    }\n}
\n\n

A string de conexão pode conter senha, porta, parâmetros SSL e outras opções. Por exemplo, para conectar a um Redis em um servidor remoto com senha:

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

Operações básicas com dados

\n\n

Após obter uma instância de IDatabase, você pode executar todas as operações padrão do Redis.

\n\n

Trabalhando com strings

\n\n
// Escrevendo uma string\nawait db.StringSetAsync("user:1:name", "Alexei");\n\n// Lendo uma string\nstring name = await db.StringGetAsync("user:1:name");\nConsole.WriteLine(name); // Exibirá: Alexei\n\n// Incrementando um contador\nawait db.StringIncrementAsync("page:visits", 1);
\n\n

Trabalhando com hashes

\n\n
// Definindo campos de um hash\nHashEntry[] userData = {\n    new HashEntry("name", "Maria"),\n    new HashEntry("age", 28),\n    new HashEntry("city", "Moscou")\n};\nawait db.HashSetAsync("user:2", userData);\n\n// Obtendo um campo específico\nstring city = await db.HashGetAsync("user:2", "city");\nConsole.WriteLine(city); // Moscou\n\n// Obtendo todos os campos do hash\nvar allFields = await db.HashGetAllAsync("user:2");\nforeach (var field in allFields)\n{\n    Console.WriteLine($"{field.Name}: {field.Value}");\n}
\n\n

Trabalhando com listas

\n\n
// Adicionando elementos à lista (à esquerda)\nawait db.ListLeftPushAsync("notifications", "Primeira notificação");\nawait db.ListLeftPushAsync("notifications", "Segunda notificação");\n\n// Obtendo todos os elementos da lista\nvar                    

Recommendations