Redis
Что это
Redis — это хранилище данных в памяти, которое держит данные в оперативной памяти для чрезвычайно быстрого чтения и записи, с опциональным сохранением на диск. Оно работает как хранилище ключ-значение, но поддерживает богатые структуры данных: списки, множества, сортированные множества, хеши и потоки. Чаще всего его используют как кэш, хранилище сессий, очередь или ограничитель частоты запросов рядом с основной базой данных.
Сильные стороны
- Задержка менее миллисекунды благодаря работе в памяти.
- Универсальные структуры: строки, хеши, списки, множества, сортированные множества, потоки.
- Встроенный TTL/срок жизни делает его идеальным для кэширования и сессий.
- Атомарные операции и Lua-скрипты для безопасных счётчиков и блокировок.
- Pub/sub и потоки поддерживают обмен сообщениями и конвейеры событий.
Компромиссы
- Объём данных ограничен доступной памятью; большие наборы данных обходятся дорого.
- Сохранение опционально и может потерять недавние записи при сбое.
- Не замена надёжному реляционному хранилищу.
- Кластеризация добавляет эксплуатационную сложность для шардирования и отказоустойчивости.
Когда использовать
Используйте Redis для кэширования результатов дорогих запросов, хранения сессий, реализации ограничения частоты запросов, управления очередями задач, построения таблиц лидеров или передачи сообщений в реальном времени. Сочетайте его с надёжной базой данных, которая хранит источник истины.
Подходит для vibe coding
Направляя ИИ, явно укажите, что Redis — это кэш или вспомогательное хранилище, а не система записи истины, поэтому он всегда должен устанавливать TTL на кэшируемые записи и проектировать понятную схему именования ключей (например, user:123:profile). Попросите ИИ использовать атомарные команды вроде INCR для счётчиков и SET ... NX EX для блокировок вместо последовательностей чтение-изменение-запись, которые могут привести к гонке. Полезный совет: пусть ИИ реализует паттерн cache-aside (чтение кэша, обращение к базе данных при промахе, затем заполнение кэша) и объяснит стратегию инвалидации, чтобы устаревшие данные не задерживались.
# Кэшируем значение со сроком жизни 1 час
SET user:123:profile "{\"name\":\"Ada\"}" EX 3600
# Атомарный счётчик ограничения частоты запросов
INCR rate:ip:203.0.113.5
EXPIRE rate:ip:203.0.113.5 60
# Распределённая блокировка: установить только если не существует, с автоистечением
SET lock:job:42 "owner-a" NX EX 30
# Таблица лидеров на сортированном множестве
ZADD leaderboard 4200 "player:7"
ZREVRANGE leaderboard 0 9 WITHSCORES