Что такое 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. Дальше в курсе мы разберём каждую из этих ролей в деталях, начиная с самой частой — кэширования.