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

Ответ

В 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 для итеративного обхода ключей.

Ответ 18+ 🔞

Так, слушай сюда, про ключи в Redis. Это ж, блядь, основа основ, как паспорт у человека — без него нихуя не получишь.

Представь, что Redis — это такой охуенно быстрый склад, а ключ — это номер ячейки. Только вместо цифр там строка, и она может быть почти любой, вплоть до картинки в байтах (хотя зачем тебе эта головная боль?). Главное — запомни: ключ уникальный. Два одинаковых — и всё, пиздец, данные перетрутся.

Что важно знать про эти ключи:

  • Могут быть любыми. Да хоть бинарный мусор запихни, система проглотит. Но мы же не мудаки, обычно пишем читаемые строки.
  • Огромные. Теоретически до 512 МБ, но если ты будешь такие создавать, то ты просто конченый идиот. Это убьёт производительность в хлам.
  • Регистр важен. myKey и mykey — это две разные, блядь, ячейки. Не перепутай.
  • Можно искать по маске. Типа user:* — найдет все ключи, которые начинаются с user:. Но команду KEYS в бою не используй, нахер! Она блокирует всю систему. Есть SCAN — он поумнее.
  • Могут сгорать. TTL — святое. Поставил ключу жизнь на 5 минут — и спи спокойно, через пять его хуй найдёшь. Идеально для кешей.

Как с этим жить в 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. Ставим таймер на самоуничтожение (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);

Как не быть распиздяем и называть ключи правильно:

  • Используй двоеточие (:) для структуры. Как папки: проект:модуль:объект:id. Например, shop:users:cart:1001 или cache:news:top. Выглядит чисто и понятно.
  • Не выёбывайся с длинными названиями. Ключ системный_кеш_пользовательского_профиля_для_ид_1001 — это пиздец как расточительно. Но и u1 — тоже хуйня, потому что через месяц ни один мудак не вспомнит, что это.
  • *Забудь про `KEYS навсегда.** Серьёзно, это команда-убийца для продакшена. Хочешь посмотреть ключи — используйSCAN`. Терпения, блядь, ноль, когда вижу такое в бою.