К содержанию

Wiki · Технологии разработки

Redis

Redis – это хранилище данных, которое держит данные в оперативной памяти и поэтому отвечает быстрее обычной базы. На сайтах Redis используют как кеш, хранилище сессий пользователей и очередь фоновых задач.

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

Redis создал итальянский программист Сальваторе Санфилиппо (antirez) в 2009 году, сейчас его развивает компания Redis. В документации Redis указано, что типичные операции выполняются быстрее миллисекунды.

Ключи, срок жизни и сохранение на диск

Redis хранит пары «ключ и значение». Ключом может быть, например, «цена товара 1024», значением сама цена. У каждой записи можно задать срок жизни, после которого она удалится сама:

SET price:1024 4990 EX 300
GET price:1024

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

Данные живут в памяти, поэтому важен вопрос, что будет при перезапуске сервера. В Redis есть два способа сохранения на диск: снимки данных через заданные промежутки времени (RDB) и журнал всех операций записи (AOF). Можно включить оба или не сохранять ничего. Для кеша последний вариант нормален: кеш соберётся заново. Для данных, которых больше нигде нет, сохранение обязательно. Если держать в Redis единственную копию заказов или заявок без записи на диск, первый же перезапуск их сотрёт.

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

Для чего Redis на сайте

  • Кеш. Готовые куски страниц и результаты тяжёлых запросов отдаются из памяти, а не собираются заново. Что такое кеш и какие виды бывают, рассказываем в статье Кэш.
  • Сессии. Авторизация и корзина пользователя. Особенно полезно, когда сайт работает на нескольких серверах сразу.
  • Очереди. Отправка писем, выгрузки в 1С и обработка картинок уходят в фон, и посетитель не ждёт.
  • Счётчики и ограничения. Например, не больше пяти попыток входа с одного адреса за минуту.

Bitrix Framework, на котором работает 1С-Битрикс, умеет хранить в Redis и кеш, и сессии. Для кеша нужно PHP-расширение redis, настройка делается в конфигурации сайта.

Redis рядом с основной базой

На сайтах Redis обычно работает рядом с MySQL или PostgreSQL, а не вместо них.

RedisMySQL, PostgreSQLMemcached
Где данныеВ памяти, по настройке сохраняет на дискНа дискеТолько в памяти
Что хранятКеш, сессии, очереди, счётчикиТовары, заказы, клиентовКеш
После перезапускаЗависит от настроек сохраненияДанные на местеКеш пустой

Лицензия и Valkey

До версии 7.2 включительно Redis распространялся под открытой лицензией BSD. В марте 2024 года компания объявила, что с версии 7.4 Redis выходит под лицензиями RSALv2 и SSPLv1. В ответ Linux Foundation 28 марта 2024 года запустила Valkey, продолжение Redis 7.2.4 под лицензией BSD. С Redis 8 появилась третья лицензия на выбор, открытая AGPLv3.

Для владельца сайта практический итог такой: в облаках и у хостингов вы встретите и Redis, и Valkey. Например, в Yandex Cloud управляемый сервис называется Managed Service for Valkey. Для кеша и сессий сайта Valkey обычно подключается так же, как Redis, но совместимость с вашей CMS всё равно проверяют.

Что даёт Redis и за чем придётся следить

  • Каталог и личный кабинет отвечают быстрее, база меньше нагружена. Но только если тормозила именно база: иногда виноват один медленный запрос или тяжёлые картинки, поэтому сначала ищут причину, разбор в статье Скорость сайта.
  • Для 1С-Битрикс подключение Redis делается настройкой, переписывать код сайта не нужно.
  • Появляется ещё один сервис, за которым надо следить. Если Redis упадёт, сайт может начать работать с ошибками.
  • Объём ограничен памятью сервера, поэтому для Redis задают лимит и правило, какие данные удалять при нехватке места. Без лимита он займёт всю память, и первым пострадает сам сайт.

Redis рассчитан на доверенную среду: документация прямо советует не открывать его в интернет. Обычно он доступен только с сервера сайта и закрыт паролем. Для этого нужен VPS или хостинг, который даёт Redis, подробнее в статье Хостинг.

Чек-лист проверки Redis на сайте: закрытый доступ из интернета, пароль и лимит памяти, хранимые данные, сохранение на диск, мониторинг, версия и лицензия
Что проверить, если на сайте есть Redis

Как узнать, есть ли Redis на проекте

Проще всего спросить разработчика, что и зачем хранится в Redis. Если хочется проверить самому, есть несколько признаков. В 1С-Битрикс тип хранилища для кеша и сессий прописан в файле настроек .settings.php, и там будет указано redis. Если проект собран в Docker, в файле compose.yaml появится отдельный сервис redis. В облаке или панели VPS Redis обычно виден как отдельная служба или управляемая база.

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

Как поднять Redis в Docker рядом с сайтом?

Добавьте в compose.yaml отдельный сервис на официальном образе redis: сайт будет обращаться к нему по имени сервиса внутри сети проекта. Порт 6379 наружу не публикуйте. Если в Redis лежит что-то кроме кеша, подключите том для данных и включите сохранение на диск, иначе пересоздание контейнера всё обнулит.

Как установить Redis на Windows?

Официально Redis под Windows не поддерживается, поэтому на своём компьютере его запускают в WSL 2 или в Docker Desktop. Для разработки этого хватает. Рабочий сайт всё равно держат на Linux-сервере.

Как узнать версию Redis на сервере?

Выполните redis-cli INFO server и найдите строку redis_version. По номеру заодно понятна лицензия: до 7.2 включительно BSD, у 7.4 RSALv2 и SSPLv1, а с восьмой версии к ним добавилась AGPLv3. Если номер 7.2 и ниже, проверьте, не пора ли обновиться или перейти на Valkey.

Redis или Memcached: что взять для кеша?

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

Valkey или Redis: что выбрать в облаке?

Для кеша и сессий сайта разницы почти нет: Valkey вырос из Redis 7.2.4 и работает с теми же клиентскими библиотеками. Он остался под открытой BSD, поэтому часть облаков, например Yandex Cloud, предлагает именно его. Перед переездом убедитесь, что модуль кеширования вашей CMS с ним дружит.

Как подключить Redis к 1С-Битрикс?

На сервер ставят сам Redis и PHP-расширение redis, а в .settings.php указывают Redis хранилищем для кеша, сессий или того и другого. Код сайта не трогают. После переключения проверьте, что авторизация и корзина не сбрасываются, а в Redis появились ключи сайта.

Что будет с сайтом, если Redis упадёт?

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

Как ограничить память Redis, чтобы он не задушил сайт?

В конфигурации задают потолок maxmemory и правило вытеснения maxmemory-policy. Для чистого кеша подходит allkeys-lru: при нехватке места Redis удаляет ключи, к которым давно не обращались. Сессии и очереди под таким правилом могут пропасть, поэтому их держат в отдельном экземпляре с другим правилом.

Когда небольшому сайту пора подключать Redis?

Когда встроенного файлового кеша CMS уже мало: выросла посещаемость, сайт разнесли на несколько серверов или появились фоновые задачи вроде выгрузок в 1С. Для визитки и небольшого каталога Redis чаще всего лишняя служба в поддержке, выигрыш в скорости будет незаметен.

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

Источники

  • Redis: What is Redis?
  • Документация Redis: Persistence
  • Документация Redis: Security
  • Redis: Licenses
  • Блог Redis: «Redis Adopts Dual Source-Available Licensing» и «Redis is now available under the AGPLv3 open source license»
  • Linux Foundation: «Linux Foundation Launches Open Source Valkey Community»
  • Документация 1С-Битрикс: «Кеширование» и «Сессии»

См. также: Скорость сайта, Хостинг, Кэш, PostgreSQL.

Остались вопросы по теме «Redis»?

Напишите нам в Telegram или MAX. Ответит специалист, который отвечает за эту тему, или руководитель проектов в рабочее время.

Сергей ЧерняковОтвечает по темеСергей ЧерняковWeb-разработчик

Посчитайте стоимость проекта за 2 минуты

Калькулятор соберёт смету по нашим тарифам: сайт, дизайн, интеграции и поддержка.