~/VibeHandbook
PDF бесплатно

Базы данных

redis.io

Redis

Что это

Представьте, что нужные прямо сейчас заметки вы держите на столе перед собой, а не ходите за каждой к картотечному шкафу — намного быстрее, но стол очищается, если пропадёт питание. Redis работает как такой стол: он держит данные в быстрой рабочей памяти (RAM, оперативная память), а не на диске, поэтому чтение и запись чрезвычайно быстрые. При необходимости он может и сохранять на диск. Оно работает как хранилище ключ-значение, но поддерживает богатые структуры данных: списки, множества, сортированные множества, хеши и потоки. Чаще всего его используют как кэш, хранилище сессий, очередь или ограничитель частоты запросов рядом с основной базой данных.

Сильные стороны

  • Задержка менее миллисекунды благодаря работе в памяти.
  • Универсальные структуры: строки, хеши, списки, множества, сортированные множества, потоки.
  • Встроенный TTL (время жизни)/срок жизни — каждая запись может сама удалиться через заданное время — делает его идеальным для кэширования и сессий.
  • Атомарные операции и Lua-скрипты для безопасных счётчиков и блокировок.
  • Pub/sub и потоки поддерживают обмен сообщениями и конвейеры событий.

Компромиссы

  • Объём данных ограничен доступной памятью; большие наборы данных обходятся дорого.
  • Сохранение опционально и может потерять недавние записи при сбое.
  • Не замена надёжному реляционному хранилищу.
  • Кластеризация добавляет эксплуатационную сложность для шардирования и отказоустойчивости.

Когда использовать

Используйте Redis для кэширования результатов дорогих запросов, хранения сессий, реализации ограничения частоты запросов, управления очередями задач, построения таблиц лидеров или передачи сообщений в реальном времени. Сочетайте его с надёжной базой данных, которая хранит источник истины.

Подходит для vibe coding

Направляя ИИ, явно укажите, что Redis — это кэш или вспомогательное хранилище, а не система записи истины. Поэтому он всегда должен устанавливать TTL на кэшируемые записи. Он также должен спроектировать понятную схему именования ключей (например, user:123:profile). Попросите ИИ использовать атомарные команды вроде INCR для счётчиков и SET ... NX EX для блокировок вместо последовательностей чтение-изменение-запись, которые могут привести к гонке. Полезный совет: пусть ИИ использует паттерн cache-aside. Проще говoря, это значит: сначала смотрим в кэш; если там нет — берём из базы данных; затем сохраняем в кэш на будущее. Также попросите ИИ объяснить стратегию инвалидации — как очищаются старые, устаревшие данные, — чтобы неактуальные данные не задерживались.

# Кэшируем значение со сроком жизни 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