Что такое ключ (key) в Redis?

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

Ответ

В Redis ключ — это уникальный строковый идентификатор, который используется для доступа к связанному с ним значению. Все данные в Redis хранятся в виде пар ключ-значение.

Основные характеристики ключей:

  • Бинарная безопасность: Ключом может быть любая последовательность байт, включая . На практике используют читаемые строки.
  • Максимальный размер: 512 МБ (хотя использовать такие большие ключи крайне неэффективно).
  • Чувствительность к регистру: user:1001 и User:1001 — это разные ключи.
  • Паттерны (шаблоны): Поддерживаются для операций массового удаления или поиска (команды KEYS, SCAN). Например, user:* найдет все ключи, начинающиеся с user:.
  • Время жизни (TTL): Ключу можно задать срок действия, после которого он автоматически удалится. Это основа для реализации кешей и временных данных.

Практический пример работы с ключами в C# (StackExchange.Redis):

using StackExchange.Redis;

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

// 1. Установка значения с ключом
string userId = "1001";
string cacheKey = $"user:profile:{userId}"; // Рекомендуется использовать двоеточие для организации пространств
bool setSuccess = db.StringSet(cacheKey, "{"name": "Alice"}");

// 2. Установка TTL (время жизни) в 5 минут
db.KeyExpire(cacheKey, TimeSpan.FromMinutes(5));

// 3. Получение значения по ключу
RedisValue cachedValue = db.StringGet(cacheKey);
if (cachedValue.HasValue)
{
    Console.WriteLine(cachedValue); // Вывод: {"name": "Alice"}
}

// 4. Проверка существования ключа
bool keyExists = db.KeyExists(cacheKey);

// 5. Удаление ключа
db.KeyDelete(cacheKey);

Соглашения по именованию (Best Practices):

  • Используйте двоеточие (:) для создания иерархии, похожей на пространства имен: project:module:object:id (например, ecommerce:users:session:1001, cache:products:top10).
  • Делайте ключи короткими, но понятными, чтобы экономить память и сохранять читаемость.
  • Избегайте использования KEYS * в production-среде, так как эта команда блокирующая. Вместо нее используйте SCAN для итеративного обхода ключей.