Что такое Redis и зачем нужна память

Redis — это база данных, которая живёт в оперативной памяти. И именно поэтому она невероятно быстрая.

«Память дороже диска, но время дороже памяти». Redis продаёт вам скорость в обмен на оперативку — и почти всегда это выгодная сделка.

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

Что значит «in-memory»

Обычная база (PostgreSQL, MySQL) хранит данные на диске — SSD или HDD. Это надёжно: выключили питание — данные на месте. Но диск медленный. Чтение случайного блока с SSD занимает десятки микросекунд, с HDD — миллисекунды. Оперативная память (RAM) отдаёт данные за наносекунды — в тысячи раз быстрее.

Redis (REmote DIctionary Server) держит весь набор данных в RAM. Запросы вроде «дай значение по ключу» выполняются за единицы микросекунд. Типичный Redis на одном ядре спокойно отдаёт 100 000+ операций в секунду, а при оптимизации — миллионы.

   Запрос: GET user:42

   Диск (PostgreSQL)          Память (Redis)
   ---------------            --------------
   App -> БД                  App -> Redis
       парсинг SQL                hash-lookup
       поиск по индексу           вернуть из RAM
       чтение с диска
       ~1-10 мс                   ~0.1-0.5 мс

Redis — это не просто «кэш»

Многие думают, что Redis нужен только для кэширования. На деле это сервер структур данных. Внутри он хранит не плоские строки, а полноценные структуры: списки, множества, хеши, отсортированные множества, потоки. Это превращает его в швейцарский нож:

  • Кэш — самое популярное применение, ускоряет чтение из медленной БД.
  • Сессии — хранение сессий пользователей веб-приложения.
  • Очереди и брокер сообщений — списки и потоки как очередь задач.
  • Счётчики и рейтинги — лидерборды в играх через sorted sets.
  • Rate limiting — ограничение частоты запросов к API.
  • Pub/Sub — рассылка событий в реальном времени.

Как работает под капотом

Redis — однопоточный (для основной обработки команд). Это звучит парадоксально для «быстрой» системы, но даёт огромный плюс: нет блокировок и гонок данных. Каждая команда выполняется атомарно, целиком, без переключений. Параллелизм достигается за счёт того, что одна операция занимает наносекунды — очередь команд разгребается мгновенно. Сетевой ввод-вывод в современных версиях вынесен в отдельные потоки, но логика данных остаётся последовательной.

Частые ошибки

  • Считать Redis «вечным» хранилищем. Память конечна. Если данные не помещаются в RAM — Redis начнёт вытеснять ключи или упадёт по OOM.
  • Хранить в Redis то, что нужно строго не потерять, без настройки персистентности. По умолчанию данные могут быть потеряны при сбое.
  • Использовать Redis как основную БД для сложных запросов. Здесь нет JOIN, сложных WHERE и транзакционной целостности уровня SQL.

Best practices

  • Воспринимайте Redis как слой ускорения поверх основной БД, а не замену ей.
  • Всегда оценивайте, поместится ли рабочий набор данных в память.
  • Для каждого кэш-ключа задавайте TTL — об этом будет отдельный раздел.

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

Где Redis действительно незаменим

Чтобы закрепить картину, полезно увидеть Redis в типичных ролях продакшен-систем. В каждой из них играет одна и та же суперсила — доступ к данным за микросекунды:

  • Ускорение чтения. Горячие данные (карточки товаров, профили, конфиги) кладутся в Redis, и основная БД перестаёт быть узким местом под пиковой нагрузкой.
  • Состояние между запросами. Веб-сервер без состояния хранит сессии в Redis, поэтому пользователя можно обслужить любым из десятка серверов за балансировщиком.
  • Координация процессов. Распределённые блокировки, счётчики и лимиты дают разным экземплярам приложения общую «точку правды» в реальном времени.
  • Реактивность. Pub/Sub и Streams доставляют события подписчикам мгновенно, связывая части системы без тяжёлого брокера.

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

Проверьте себя
1. Почему Redis быстрее обычной базы данных на диске?
AОн использует более новый язык программирования
BОн хранит данные в оперативной памяти (RAM), которая в тысячи раз быстрее диска
CОн сжимает все данные перед записью
DОн работает на нескольких серверах одновременно
2. Что из перечисленного НЕ является типичным применением Redis?
AКэширование результатов запросов к БД
BХранение пользовательских сессий
CСложные аналитические запросы с множественными JOIN по терабайтам данных
DЛидерборды и счётчики