ООО «Ивент Хаб» · Москва · работаем по всей России
Пн—Пт, 10:00—19:00hello@gusi-lebedi.comРеквизиты
Практическое руководство

Redis: что это, как работает кеш и когда он нужен сайту

Как Redis участвует в работе сайта: запросы к кешу, ключи, срок жизни и сохранение данных. На примере магазина разбираем актуальность и проверку результата.

Redis как компонент работы с данными в архитектуре веб-проекта

Каталог открывается медленно. Разработчик предлагает Redis, а владельцу магазина хочется понять две вещи: станет ли быстрее и не начнут ли покупатели видеть старые цены. Обе важны. Быстрый ответ полезен только тогда, когда в нём правильные данные.

В Гуси-Лебеди мы предлагаем обсуждать Redis через конкретную работу сайта. Ниже разберём условный магазин: откуда приходит карточка товара, что можно сохранить для повторного запроса и как проверить результат. Это пример устройства приложения, а не история выполненного проекта.

Что такое Redis и что происходит при запросе к сайту

Хранилище повторно используемых данных между приложением и источником

Redis хранит данные в памяти и позволяет обращаться к ним по ключам. Представьте именованную запись: приложение знает её адрес и запрашивает связанное с ним значение. Что положить в запись и когда её обновлять, решает логика приложения.

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

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

Допустим, сайт формирует карточку товара из исходных данных. Без готового кеша приложение получает нужные сведения и собирает ответ. В варианте с кешированием оно может сохранить результат в Redis, чтобы использовать при следующем подходящем запросе. Это возможная схема, а не обязательное поведение любого сайта после установки Redis.

Попадание в кеш означает, что приложение нашло нужное сохранённое значение. Промах означает, что значения нет и нужен другой путь получения результата. Хороший проект предусматривает оба случая: кеш не обязан быть заполнен заранее.

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

Владелец сайта может попросить команду показать цепочку одного обращения: что получает приложение, где тратит время и какой результат собирается использовать повторно. Для этого не требуется разбираться во всех командах Redis. Требуется понятное объяснение роли компонента и проверяемого изменения.

Ключи и TTL: почему быстрый ответ может оказаться неправильным

Ключи зависят от условий запроса, а значения имеют срок жизни

Ключ должен различать результаты, которые нельзя смешивать. Если цена зависит от группы покупателя, одного адреса записи для всех посетителей может быть недостаточно. То же относится к языку страницы, выбранному варианту товара и другим условиям вашего приложения. Условное имя product:42:retail:ru показывает идею: запись относится к определённому товару, типу цены и языку. Это иллюстрация, не готовая рекомендация формата ключей.

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

Поэтому отдельно согласуйте реакцию на изменение источника: удалить старое значение, заменить его или применить другой предусмотренный механизм. Выбор зависит от приложения и требований к актуальности. Для цены в оформляемом заказе и для редко меняющегося описания товара эти требования могут различаться.

Полезная проверка проста по смыслу: открыть карточку, изменить исходные данные и открыть её снова в нужных пользовательских состояниях. Команда должна объяснить, какой результат ожидается сразу после изменения, после истечения TTL и при отсутствии записи. Такой разговор предметнее просьбы «поставьте срок побольше, чтобы работало быстрее».

При разработке серверной части сайта мы предлагаем описывать эти правила вместе с результатом, который должен получить посетитель. Важен не только адрес записи, но и её смысл: кому можно показать значение и когда ему уже нельзя доверять.

Кеш, сессии и сохранение: какие данные можно потерять

Сохранение снимков и журнала операций, ограничения памяти и доступ

Копия описания товара и состояние пользовательской сессии требуют разных решений. Описание можно заново получить из исходной базы. При потере сессии приложение должно выполнить предусмотренное действие, например предложить повторный вход. Что будет с корзиной и незавершёнными действиями, зависит от того, где и как они хранятся.

Роль данныхВопрос к команде
Повторно используемый результатМожно ли восстановить его из источника и какой ценой?
Сессия пользователяЧто увидит человек после потери записи?
Данные, существующие только в RedisКакой объём потери допустим и как проверяют восстановление?

Не стоит считать Redis ни «только временной памятью», ни автоматически надёжным постоянным хранилищем. В документации о сохранении данных описаны RDB, AOF, их сочетание и вариант без сохранения. RDB создаёт снимки набора данных, AOF записывает операции изменения. Режим и параметры влияют на восстановление и возможную потерю последних изменений.

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

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

Память тоже нужно планировать. Набор записей растёт, значения имеют разный размер, а срок жизни задан не обязательно каждому ключу. Попросите команду показать ограничения и поведение при их достижении. Удаление записей, отказ записи и обработка отсутствующего значения должны соответствовать выбранной конфигурации и логике приложения.

Доступ к Redis принадлежит компонентам приложения, которым он необходим. В официальном руководстве по безопасности рассматриваются доверенные клиенты, сетевые ограничения, права и TLS. Нужные средства проверяют для своего окружения. Пароли и токены не должны попадать в примеры диагностических записей или материалы для читателя.

Если исходные товары, заказы и связи между ними живут в реляционной базе, Redis может выполнять другую роль рядом с ней. Об устройстве исходного хранилища читайте в статье о PostgreSQL для веб-проекта.

Выбирать компонент следует по требованиям к данным. Для заказа важны его сохранение и согласованность операций; для копии описания товара, возможность получить актуальный текст повторно. Одно общее обещание скорости эти различия не объясняет.

Как понять, что Redis действительно помог сайту

Сравнение корректности результата и сценариев использования кеша

Начните с измерений до подключения. Выберите операцию, существенную для посетителя: открытие карточки, выдача каталога или другой конкретный сценарий. Запишите условия, объём данных и нагрузку. Если исходное состояние неизвестно, после изменения будет трудно отделить эффект Redis от других доработок.

Затем сравните несколько состояний. Первый запрос без готового значения показывает путь получения данных из источника. Повторный запрос показывает повторное использование. Запрос после изменения товара проверяет актуальность. Их результаты нельзя объединять в одно «теперь всё быстро».

  1. Получите ответ без готовой записи и проверьте его содержание.
  2. Повторите подходящий запрос и сравните время и данные.
  3. Измените источник и проверьте ожидаемое обновление.
  4. Проверьте другой пользовательский контекст, если результат от него зависит.
  5. В тестовом окружении проверьте предусмотренное поведение при недоступности Redis.

Последний сценарий особенно важен. Если приложение при каждом промахе обращается к исходной базе, массовое отсутствие записей может изменить нагрузку на неё. Команда должна объяснить, как сайт ведёт себя при пустом кеше, восстановлении и ошибках обращения. Не нужно отключать рабочий компонент ради демонстрации: проверка выполняется по согласованному порядку на подготовленном окружении.

Принимать стоит отдельно скорость и корректность. Старая цена, смешанные пользовательские данные или пропавшая операция не становятся приемлемыми из-за быстрого ответа. Результат проверки должен показывать, что пользователь получил нужное значение в предусмотренных условиях.

Для дальнейшего сопровождения сайта и его компонентов сохраните описание роли Redis, правила обновления, показатели наблюдения и ответственных. После изменения приложения команда сможет проверить не только доступность хранилища, но и сценарий целиком.

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

Начать проект

Обсудим вашу задачу

Ответим в течение рабочего дня. Можно без технического задания — достаточно цели и вводных.

Заполнить короткий бриф ↗
Навигация по экспертизе

Ещё направления для вашего проекта

Все 86 услуг →