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

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

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

Начать курс

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

В современной разработке на платформе .NET часто возникает необходимость в быстром кэшировании данных, организации очередей сообщений или управлении сессиями. Одним из лучших решений для этих задач является использование Redis — высокопроизводительного хранилища данных типа "ключ-значение". Для взаимодействия с Redis из C# (.NET) наиболее популярной и надёжной библиотекой является StackExchange.Redis.

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

StackExchange.Redis — это клиентская библиотека с открытым исходным кодом, разработанная компанией Stack Overflow. Она предоставляет полный набор функций для работы с Redis: от простых операций GET/SET до сложных сценариев с публикацией/подпиской (Pub/Sub), транзакциями и Lua-скриптами. Библиотека оптимизирована для многопоточных приложений и поддерживает асинхронные операции, что делает её идеальным выбором для высоконагруженных сервисов на C#.

Установка

Установить библиотеку можно через NuGet Package Manager. Выполните команду в консоли диспетчера пакетов:

Install-Package StackExchange.Redis

Или через .NET CLI:

dotnet add package StackExchange.Redis

После установки вы можете подключиться к серверу Redis, используя строку подключения:

using StackExchange.Redis;

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379");
IDatabase db = redis.GetDatabase();

Основные возможности и примеры кода

1. Базовые операции с ключами

Самый распространённый сценарий — сохранение и получение значений. Пример работы со строками:

// Запись данных
db.StringSet("user:1:name", "Алексей");
db.StringSet("user:1:email", "alex@example.com");

// Чтение данных
string name = db.StringGet("user:1:name");
string email = db.StringGet("user:1:email");

Console.WriteLine($"Имя: {name}, Email: {email}");

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

Redis поддерживает структуру данных "хэш", что удобно для хранения объектов:

// Запись хэша
HashEntry[] user = new HashEntry[]
{
    new HashEntry("name", "Мария"),
    new HashEntry("age", 28),
    new HashEntry("city", "Москва")
};
db.HashSet("user:2", user);

// Чтение всех полей
HashEntry[] loadedUser = db.HashGetAll("user:2");
foreach (var entry in loadedUser)
{
    Console.WriteLine($"{entry.Name}: {entry.Value}");
}

3. Кэширование с временем жизни

Одна из ключевых функций Redis — автоматическое удаление устаревших данных. Установите TTL (Time To Live) для ключа:

// Кэшируем данные на 10 минут
db.StringSet("cache:weather", "солнечно, +22°C", TimeSpan.FromMinutes(10));

// Проверяем время жизни
TimeSpan? ttl = db.KeyTimeToLive("cache:weather");
Console.WriteLine($"Осталось: {ttl?.TotalSeconds} секунд");

4. Публикация и подписка (Pub/Sub)

Реализуйте обмен сообщениями в реальном времени. Пример подписчика:

// Создаём подписчика
ISubscriber subscriber = redis.GetSubscriber();
subscriber.Subscribe("notifications", (channel, message) =>
{
    Console.WriteLine($"Получено уведомление: {message}");
});

// Публикуем сообщение
subscriber.Publish("notifications", "Привет, мир!");

5. Транзакции

Выполнение нескольких операций атомарно:

ITransaction transaction = db.CreateTransaction();
transaction.AddCondition(Condition.KeyNotExists("counter:lock"));
transaction.StringSetAsync("counter:lock", "1");
transaction.StringIncrementAsync("counter:value");

// Фиксируем транзакцию
bool committed = transaction.Execute();
Console.WriteLine(committed ? "Транзакция выполнена" : "Отказ");

Преимущества StackExchange.Redis

  • Высокая производительность — библиотека использует мультиплексирование соединений, что позволяет обрабатывать тысячи запросов в секунду.
  • Асинхронность — полная поддержка async/await для неблокирующих операций.
  • Поддержка кластеров — автоматическая маршрутизация запросов в кластерной конфигурации Redis.
  • Безопасность — поддержка SSL/TLS и аутентификации.
  • Гибкость — работа с любыми типами данных Redis: строки, списки, множества, сортированные множества, геоданные.
  • Активное сооб

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