Приведи пример работы с Redis на C#.

«Приведи пример работы с Redis на C#.» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для работы с Redis в C# чаще всего используется клиентская библиотека StackExchange.Redis. Ниже приведён базовый пример подключения и операций.

using StackExchange.Redis;
using System;

class RedisExample
{
    static void Main()
    {
        // 1. Установка соединения (синглтон на всё приложение)
        ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost:6379");
        IDatabase db = redis.GetDatabase();

        // 2. Операции со строковыми значениями (String)
        bool setSuccess = db.StringSet("myKey", "Hello, Redis!");
        string cachedValue = db.StringGet("myKey");
        Console.WriteLine($"StringGet: {cachedValue}"); // Hello, Redis!

        // 3. Работа с хешами (Hash) для хранения объектов
        db.HashSet("user:1000", new HashEntry[] 
        {
            new HashEntry("name", "Alice"),
            new HashEntry("email", "alice@example.com"),
            new HashEntry("score", 1250)
        });

        string userName = db.HashGet("user:1000", "name");
        Console.WriteLine($"HashGet name: {userName}"); // Alice

        // 4. Установка времени жизни ключа (TTL)
        db.KeyExpire("myKey", TimeSpan.FromMinutes(5));
    }
}

Практические рекомендации:

  • ConnectionMultiplexer — потокобезопасный и предназначен для многократного использования. Создавайте один экземпляр и используйте его на протяжении всего жизненного цикла приложения.
  • Асинхронные методы (например, StringSetAsync, StringGetAsync) предпочтительны для неблокирующих операций в веб-приложениях.
  • Все данные в Redis хранятся в виде байтовых строк. Библиотека автоматически сериализует строки и числа, но для сложных объектов потребуется ручная сериализация (например, в JSON).
  • Для структурированного хранения данных, помимо String и Hash, Redis предоставляет типы List, Set, Sorted Set и Stream.