Что такое Redis и почему он такой быстрый
Основы3 минРедакция Innovialabs
Коротко
Redis — это хранилище ключ-значение, которое держит все данные в оперативной памяти и поэтому отвечает очень быстро. Его используют для кэша, сессий, очередей, счётчиков и рейтингов, а не как единственную базу для важных данных.
Коротко о Redis
Redis — это хранилище данных в формате ключ-значение, которое держит всё в оперативной памяти. Вы сохраняете значение под ключом, например session:42, и потом мгновенно получаете его по этому ключу.
Обычно Redis не заменяет основную базу, а работает рядом с ней: PostgreSQL или MySQL хранят надёжные данные, а Redis ускоряет то, что запрашивается часто или должно работать очень быстро.
Почему Redis такой быстрый
- Данные в памяти. Чтение из RAM на порядки быстрее, чем с диска. Это главная причина.
- Простые операции. Нет сложного планировщика запросов и JOIN: команда точно знает, где лежат данные, и у большинства операций предсказуемая сложность.
- Однопоточное выполнение команд. Команды выполняются по очереди, поэтому не нужны блокировки, а каждая команда атомарна. Сетевой ввод-вывод при этом обрабатывается эффективно, без ожидания каждого клиента.
- Лёгкий протокол и оптимизированное внутреннее представление структур.
Обратная сторона однопоточности: одна медленная команда, например перебор всех ключей через KEYS *, задерживает всех остальных клиентов.
Структуры данных
Значение в Redis — не только строка. Это и делает его универсальным инструментом.
| Тип | Что это | Типичная задача |
|---|---|---|
| Strings | Строка или число | Кэш страницы, счётчик просмотров |
| Hashes | Набор полей внутри ключа | Профиль пользователя, корзина |
| Lists | Упорядоченный список | Простая очередь задач, лента событий |
| Sets | Множество уникальных значений | Уникальные посетители, теги |
| Sorted sets | Множество с числовым рейтингом | Таблица лидеров, топ товаров |
Несколько команд для примера:
SET page:home "<html>..." EX 300 # кэш на 5 минут
GET page:home
INCR views:article:15 # атомарный счётчик
HSET user:42 name "Aliya" city "Tashkent"
LPUSH queue:emails "order-1001"
SADD visitors:2026-03-01 "user:42"
ZADD leaderboard 1500 "player:7"
ZRANGE leaderboard 0 -1 WITHSCORES
Параметр EX задаёт время жизни ключа (TTL): по его истечении Redis удалит ключ сам. Для кэша и сессий это основной механизм.
Сохранение на диск
Хотя Redis работает в памяти, он умеет сохранять данные, чтобы пережить перезапуск:
- RDB (снимки). Периодически сохраняет всю базу в файл. Компактно и быстро восстанавливается, но изменения после последнего снимка при сбое теряются.
- AOF (журнал команд). Записывает каждую операцию изменения. Потерь меньше, частоту записи на диск можно настроить, но файл больше.
- RDB + AOF вместе — частый выбор, когда данные нужно сохранять.
- Без сохранения — для чистого кэша, который всегда можно восстановить из основной базы.
Ограничения хранения в RAM
- Объём. Все данные должны помещаться в память сервера, а память дороже диска.
- Переполнение. Когда достигнут лимит
maxmemory, Redis действует по выбранной политике вытеснения: например, удаляет давно не использованные ключи или отказывает в записи. Для кэша это нормально, для важных данных — опасно. - Риск потери данных. Даже с сохранением на диск возможна потеря последних изменений при сбое, в зависимости от настроек.
- Нет сложных запросов. Искать «всех пользователей из Ташкента старше 30» Redis не умеет так, как SQL.
Типичные сценарии
- Кэш ответов базы и API.
- Сессии пользователей и токены.
- Ограничение частоты запросов (rate limiting).
- Очереди фоновых задач.
- Счётчики, рейтинги, онлайн-статусы.
- Pub/Sub для простых уведомлений между сервисами.
Частые ошибки
- Хранить в Redis единственную копию важных данных без настроенного сохранения.
- Не задавать TTL ключам кэша — память постепенно заполняется.
- Использовать
KEYS *на рабочем сервере вместоSCAN. - Открывать Redis в интернет без пароля и сетевых ограничений.