Что такое Redis на самом деле
Redis — это key-value-хранилище, живущее в памяти. Вы даёте ему ключ ("user:1042:profile") и значение, и по запросу он возвращает значение обратно — как правило, значительно быстрее миллисекунды, потому что на пути чтения ничто не касается диска. Помимо обычных строк он предлагает практичные структуры данных: хеши для объектов, списки и сортированные множества для лент и таблиц лидеров, множества для проверок принадлежности, счётчики с атомарным инкрементом.
Именно эта комбинация — скорость RAM плюс настоящие структуры данных — объясняет, почему он есть почти в каждом серьёзном веб-стеке. Он не соревнуется с вашей базой в долговечности и выразительности запросов; он соревнуется с ней в том, чтобы *быстро отвечать на один и тот же вопрос снова и снова*, — и выигрывает это соревнование на два-три порядка.
Какую проблему он решает: повторяющаяся дорогая работа
Посмотрите, что типичный бэкенд делает на каждый запрос: загружает пользователя, загружает настройки, выполняет тот же запрос списка товаров или меню, который не менялся с прошлого посетителя, и всё это рендерит. Большая часть этой работы даёт тот же ответ, что и секунды назад. База данных всё равно послушно выполняет её заново — парсит, планирует, читает страницы, соединяет таблицы — и под нагрузкой именно эти повторяющиеся запросы становятся узким местом задолго до того, как закончится CPU.
Паттерн cache-aside чинит ровно это: сначала проверяем Redis; при попадании возвращаем закешированную копию; при промахе выполняем настоящий запрос, сохраняем результат с временем жизни (TTL) и отдаём его. Странице, которой требовалось пятнадцать запросов, на «тёплом» пути теперь нужно пятнадцать обращений к памяти. База переходит от нагрузки на каждый запрос к одному обращению за окно TTL — именно поэтому сайты с Redis переживают пики трафика, которые без него положили бы их на лопатки.
Сессии — вторая классическая задача. Хранение сессий входа в Redis вместо локального диска означает, что любая реплика вашего приложения может обслужить любого пользователя — а это и есть то, что вообще делает горизонтальное масштабирование возможным.
Где Redis не поможет
Честная граница экономит недели. Redis не делает медленный запрос быстрым при первом выполнении — он удешевляет только *второе*, так что отсутствующий индекс в базе так и остаётся отсутствующим индексом. Он не чинит медленный сетевой путь до origin и тяжёлые изображения — это проблемы доставки, которые решаются на edge, а не в RAM. И он не является долговечным источником истины: память конечна, а вытеснение ключей заложено в дизайн, поэтому всё, что вы не можете позволить себе потерять, должно жить в базе данных, а в Redis — лишь его одноразовая копия.
Настоящая цена кеширования — инвалидация: устаревшая цена или неактуальная проверка прав — это баг, который видят ваши пользователи. Держите TTL короткими там, где важна корректность, явно удаляйте ключи при изменении исходных данных и не кешируйте то, что меняется на каждом запросе, — кеш с почти нулевым hit rate это чистые накладные расходы.
Managed Redis: путь через дополнение
Запустить Redis самому несложно в первый день — сложно на двухсотый: лимиты памяти, рестарты, обновления версий, переподключение приложения. Managed-инстанс складывает всё это внутрь платформы.
На контейнерной платформе cdn.com.tr Redis — это дополнение, которое вы подключаете к приложению. При включении инстанс разворачивается, а параметры подключения автоматически внедряются в окружение приложения — REDIS_HOST, REDIS_PORT, REDIS_DB и готовый к использованию REDIS_URL, — так что фреймворки вроде Laravel, Django или WordPress подхватывают его конфигурацией, а не кодом. WordPress-платформа использует то же дополнение как объектный кеш — одно из самых эффективных одиночных изменений для нагруженного WordPress-сайта. Отключите дополнение — и переменные будут вычищены вместе с ним.
Включить managed Redis для приложения через cdnctl
# attach a managed Redis instance to your app
cdnctl container addons enable-redis --account <uuid> --app <app_uuid> --env-prefix REDIS
# see what is attached
cdnctl container addons list --account <uuid> --app <app_uuid>
# remove it again
cdnctl container addons disable-redis --account <uuid> --app <app_uuid>
Redis и CDN: два слоя кеша, разные задачи
Стоит точно понимать, как кеш в памяти соотносится с CDN: оба называются «кешированием», но они не взаимозаменяемы. CDN кеширует *ответы* — готовый HTML, изображения, файлы — рядом с посетителем, поэтому множество запросов вообще не доходит до вашего приложения. Redis кеширует *данные внутри* приложения, поэтому те запросы, которые всё же приходят, обслуживаются дёшево.
Они усиливают друг друга: edge поглощает кешируемое большинство трафика, а Redis делает быстрым персонализированный, некешируемый остаток. Стек с обоими слоями обычно отдаёт анонимные страницы с edge за десятки миллисекунд, а страницы авторизованных пользователей — с прогретого Redis бэкенда. Именно такая архитектура стоит за большинством сайтов, которые ощущаются мгновенными под нагрузкой.
Часто задаваемые вопросы
Является ли Redis базой данных?
Он умеет сохраняться на диск, но нанимать его стоит не для этой работы. Относитесь к Redis как к быстрой, одноразовой копии данных, источник истины которых живёт в настоящей базе. Если потеря данных будет болезненной — им нельзя жить только в Redis.
Что кешировать в первую очередь?
Ответ даёт лог запросов: самые частые дорогие запросы, результаты которых меняются редко, — списки товаров, меню, настройки, отрендеренные фрагменты. Закешируйте их с разумным TTL — и большую часть выигрыша вы обычно получите за один вечер.
Сколько памяти нужно Redis-кешу?
Меньше, чем принято думать, — закешированные результаты запросов и сессии невелики. Начните скромно, следите за hit rate и вытеснениями, и растите только тогда, когда начнут вытесняться ещё полезные ключи. Высокий hit rate на маленьком инстансе лучше огромного простаивающего.
Даёт ли Redis выигрыш для WordPress?
Заметный. WordPress постоянно перечитывает опции и объекты из MySQL; объектный кеш на Redis превращает эти чтения в обращения к памяти. На managed WordPress-платформе то же самое дополнение Redis работает объектным кешем — в связке с edge-кешированием спереди.