Redis клиент для C# (.NET): StackExchange.Redis — подключение и примеры

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Redis клиент для C# (.NET): StackExchange.Redis

В современной разработке на платформе .NET часто возникает необходимость использования высокопроизводительных кэширующих систем и брокеров сообщений. Одним из самых популярных решений является Redis — in-memory хранилище данных, работающее по принципу «ключ-значение». Для взаимодействия с Redis из C# (.NET) существует проверенная и мощная библиотека StackExchange.Redis. Она разработана компанией Stack Exchange (авторы Stack Overflow) и поддерживает все основные возможности Redis, включая кластеризацию, репликацию и Pub/Sub.

Что такое StackExchange.Redis?

StackExchange.Redis — это высокопроизводительный, асинхронный клиент для Redis, написанный на C#. Библиотека оптимизирована для работы с большим количеством одновременных подключений и поддерживает мультиплексирование — одно соединение может обслуживать множество параллельных запросов без блокировок. Это делает её идеальным выбором для высоконагруженных приложений на .NET Core, .NET 5/6/7/8 и .NET Framework.

Установка библиотеки

Установка StackExchange.Redis выполняется через NuGet Package Manager. Самый простой способ — использовать консоль диспетчера пакетов в Visual Studio или dotnet CLI.

dotnet add package StackExchange.Redis

Или через NuGet:

Install-Package StackExchange.Redis

После успешной установки в проекте появляется ссылка на сборку, и можно начинать работу с Redis.

Подключение к серверу Redis

Основной класс для взаимодействия — ConnectionMultiplexer. Он управляет подключениями к Redis и автоматически обрабатывает повторные соединения, ошибки сети и переключение на реплики.

Пример создания подключения:

using StackExchange.Redis;

class Program
{
    static async Task Main(string[] args)
    {
        // Строка подключения к локальному Redis
        string connectionString = "localhost:6379";
        
        // Создание мультиплексора
        using var redis = await ConnectionMultiplexer.ConnectAsync(connectionString);
        
        // Получение базы данных (по умолчанию db=0)
        IDatabase db = redis.GetDatabase();
        
        // Проверка соединения
        bool isConnected = db.Ping().TotalSeconds < 2;
        Console.WriteLine($"Connected: {isConnected}");
    }
}

Строка подключения может содержать пароль, порт, параметры SSL и другие опции. Например, для подключения к Redis на удалённом сервере с паролем:

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

Основные операции с данными

После получения экземпляра IDatabase можно выполнять все стандартные операции Redis.

Работа со строками

// Запись строки
await db.StringSetAsync("user:1:name", "Алексей");

// Чтение строки
string name = await db.StringGetAsync("user:1:name");
Console.WriteLine(name); // Выведет: Алексей

// Инкремент счётчика
await db.StringIncrementAsync("page:visits", 1);

Работа с хэшами

// Установка полей хэша
HashEntry[] userData = {
    new HashEntry("name", "Мария"),
    new HashEntry("age", 28),
    new HashEntry("city", "Москва")
};
await db.HashSetAsync("user:2", userData);

// Получение одного поля
string city = await db.HashGetAsync("user:2", "city");
Console.WriteLine(city); // Москва

// Получить все поля хэша
var allFields = await db.HashGetAllAsync("user:2");
foreach (var field in allFields)
{
    Console.WriteLine($"{field.Name}: {field.Value}");
}

Работа со списками

// Добавление элементов в список (слева)
await db.ListLeftPushAsync("notifications", "Первое уведомление");
await db.ListLeftPushAsync("notifications", "Второе уведомление");

// Получение всех элементов списка
var items = await db.ListRangeAsync("notifications");
foreach (var item in items)
{
    Console.WriteLine(item);
}

// Удаление и получение последнего элемента (справа)
string last = await db.ListRightPopAsync("notifications");

Использование Pub/Sub (издатель-подписчик)

StackExchange.Redis полностью поддерживает механизм Pub/Sub, что позволяет строить асинхронные системы обмена сообщениями.

Пример подписчика:

var subscriber = redis.GetSubscriber();

// Подписка на канал "events"
await subscriber.SubscribeAsync("events", (channel, message) =>
{
    Console.WriteLine($"Получено сообщение: {message}");
});

Console.WriteLine("Ожидание сообщений. Нажмите Enter для выхода.");
Console.ReadLine();

Пример издателя:

var subscriber = redis.GetSubscriber();

// Публи                    

Рекомендаций