Содержание
Redis в веб-проекте — это быстрое хранилище в оперативной памяти для данных, которые нужны часто и ненадолго: кеш, сессии, очереди задач, счётчики, лимиты запросов и блокировки. Он снимает нагрузку с основной базы и ускоряет ответы, но не заменяет её: хранить в Redis единственную копию важных данных рискованно. Небольшому сайту он может быть и вовсе не нужен.
Разберём, для чего Redis используют на практике, как его настроить и когда без него можно обойтись.
Для чего Redis используют в веб-приложениях?
Redis используют там, где нужны очень быстрые чтение и запись небольших порций данных, которые можно потерять или восстановить. Все данные лежат в памяти, поэтому операции занимают доли миллисекунды — на порядки быстрее, чем запрос к базе на диске.
| Задача | Как Redis помогает | Что будет без него |
|---|---|---|
| Кеширование | Хранит готовые результаты тяжёлых запросов и страниц | Каждый запрос нагружает базу заново |
| Сессии | Быстрый доступ к сессии с любого сервера приложения | Сессии в файлах не работают при нескольких серверах |
| Очереди задач | Брокер для фоновых задач | Можно использовать базу, но медленнее при большом потоке |
| Лимиты запросов | Атомарные счётчики с временем жизни | Защиту от перебора сложнее сделать надёжно |
| Блокировки | Не даёт двум процессам выполнить одно действие одновременно | Двойные списания, дубли задач |
| Счётчики и рейтинги | Отсортированные множества для топов и лидербордов | Тяжёлые агрегирующие запросы к базе |
Как Redis используют для кеша?
Для кеша Redis хранит результаты дорогих операций с ограниченным временем жизни: приложение сначала ищет готовый результат в Redis и только при его отсутствии идёт в базу. Главные вопросы — что кешировать, на сколько и как сбрасывать кеш при изменении данных.
Пример в Laravel: кешируем каталог категорий на час и сбрасываем при изменении.
// Чтение: из Redis, а при промахе — из базы с сохранением на час
$categories = Cache::remember('catalog:categories', now()->addHour(), function () {
return Category::query()->withCount('products')->orderBy('position')->get();
});
// Запись: после изменения категории старый кеш удаляется
Category::saved(fn () => Cache::forget('catalog:categories'));
Кешировать стоит то, что читают намного чаще, чем меняют: каталоги, справочники, настройки, результаты тяжёлых отчётов. Персональные и часто меняющиеся данные в кеше дают больше проблем, чем пользы.
Фото: Unsplash
Можно ли хранить в Redis важные данные?
Хранить в Redis единственную копию важных данных не стоит: он работает в памяти, и хотя умеет сохранять данные на диск, при сбое можно потерять последние изменения, а при нехватке памяти он может вытеснять ключи. Заказы, платежи и пользователей держите в основной базе.
Настройки, которые важно проверить
- Лимит памяти (
maxmemory) — без него Redis может занять всю память сервера. - Политика вытеснения (
maxmemory-policy) — для чистого кеша подходитallkeys-lru, для очередей и сессий вытеснение опасно. - Сохранение на диск — RDB-снимки и журнал AOF, если потеря данных при перезапуске недопустима.
- Доступ — Redis не должен быть открыт в интернет; пароль и закрытая сеть обязательны.
Часто разумно разделять экземпляры: один Redis под кеш с вытеснением, другой — под очереди и сессии без него.
Когда Redis не нужен?
Redis не нужен, когда нагрузка небольшая, приложение работает на одном сервере и база справляется со всеми запросами. Лишний компонент — это ещё одна вещь, которую надо обновлять, мониторить и восстанавливать при сбое.
Признаки, что без Redis можно обойтись:
- Один сервер приложения — сессии и кеш могут жить в файлах или базе.
- Очередь задач небольшая — достаточно драйвера очередей на основе базы данных.
- Медленных запросов нет, или они решаются индексами — об этом в статье индексы в PostgreSQL.
- Нет необходимости в лимитах запросов и блокировках между серверами.
Признаки, что Redis пора добавить: несколько серверов приложения, рост очереди задач, повторяющиеся тяжёлые запросы, которые нельзя ускорить индексами, и необходимость атомарных счётчиков. Для очередей он особенно удобен — подробнее в статье очереди задач в веб-приложении.
Чем Redis отличается от Valkey и других альтернатив?
Valkey — это ответвление Redis, которое сообщество под эгидой Linux Foundation начало развивать в 2024 году после смены лицензии Redis. Для типичных задач веб-приложения они совместимы по протоколу и командам, поэтому клиенты и фреймворки работают с обоими.
Как выбирать:
- в управляемом облаке берите то, что предлагает провайдер, — часто это Valkey или совместимый сервис;
- при самостоятельном развёртывании проверьте условия лицензии выбранной версии;
- для простого кеша подойдёт и Memcached, но он не умеет очереди, структуры данных и сохранение на диск.
Коротко
- Redis — быстрое хранилище в памяти для кеша, сессий, очередей, лимитов и блокировок.
- Кешируйте то, что часто читают и редко меняют, и сбрасывайте кеш при изменении данных.
- Не храните в Redis единственную копию важных данных; настройте лимит памяти, вытеснение и доступ.
- На одном сервере с небольшой нагрузкой Redis часто не нужен.
- Valkey совместим с Redis для типичных задач; в облаке выбирайте то, что поддерживает провайдер.
Частые вопросы
Сколько памяти нужно Redis?
Столько, сколько занимают ваши ключи, плюс запас на пики. Для кеша и сессий небольшого проекта обычно хватает сотен мегабайт; следите за использованием памяти в мониторинге и задайте лимит.
Что будет с сайтом, если Redis упадёт?
Зависит от того, как он используется. Если только для кеша, сайт продолжит работать медленнее, обращаясь к базе. Если в Redis сессии и очереди, пользователи потеряют вход, а фоновые задачи остановятся — поэтому нужен мониторинг и автоматический перезапуск.
Нужен ли кластер Redis?
Большинству проектов достаточно одного экземпляра с репликой для отказоустойчивости. Кластер нужен, когда данные не помещаются в память одного сервера или нагрузка превышает его возможности.



