Заметки

Объектный кеш (Redis) в WordPress: зачем нужен и как настроить

M
Markabus
·19 августа 2026 г.
Тёмный рабочий стол разработчика: на мониторе крупным планом консоль со статистикой кеша — процент попаданий и график, рядом мини-сервер с синим индикатором и сетевыми кабелями

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

Что такое объектный кеш в WordPress

Внутри WordPress есть класс WP_Object_Cache — простое хранилище «ключ → значение» в оперативной памяти PHP. Ядро и плагины кладут в него результаты дорогих операций через функции wp_cache_get(), wp_cache_set(), wp_cache_add() и wp_cache_delete(). Если один и тот же запрос к базе нужен дважды за время отрисовки страницы, второй раз он берётся из памяти.

Ключевая деталь: по умолчанию этот кеш непостоянный. Официальная документация формулирует это прямо — данные живут в памяти только на время одного HTTP-запроса. Константа WP_CACHE в wp-config.php сама по себе ничего не меняет: без плагина она не включает постоянное хранение.

Чтобы кеш пережил конец запроса, нужен внешний бэкенд — Redis, Memcached, APCu или даже файл SQLite. Подключается он не хуком, а через drop-in: файл wp-content/object-cache.php. WordPress проверяет его наличие на самом раннем этапе загрузки, и если файл есть, штатный класс просто не подключается — его место занимает реализация из drop-in. Именно поэтому объектный кеш работает раньше и глубже, чем любой обычный плагин.

Чем объектный кеш отличается от кеша страниц

Эти два механизма часто путают, хотя они решают разные задачи и прекрасно уживаются вместе:

  • Кеш страниц сохраняет готовый HTML целиком. Анонимный посетитель получает файл, минуя PHP и базу вовсе. Максимальный выигрыш — но только для неавторизованных пользователей и статичных страниц.
  • Объектный кеш ускоряет саму генерацию страницы. Он помогает там, где HTML закешировать нельзя: админка, корзина и оформление заказа в WooCommerce, личный кабинет, поиск, фильтры, REST API, AJAX-запросы.

Иными словами, кеш страниц спасает от нагрузки на витрине, объектный — внутри сайта. Подробный разбор всех уровней кеширования мы собрали в отдельном материале: Кэширование в WordPress: обзор способов.

Почему именно Redis

Redis — резидентное хранилище данных в памяти (in-memory data store), которое работает отдельным сервисом и отвечает по сети или через сокет. Для WordPress он привлекателен по нескольким причинам.

Общая память для всех процессов. APCu живёт внутри процесса PHP-FPM и не делится данными между воркерами, тем более между серверами. Redis — единая точка: сколько бы ни было PHP-процессов, кеш у них один.

Предсказуемое вытеснение. Redis умеет держать заданный объём памяти (maxmemory) и выбрасывать самые редко используемые ключи по политике allkeys-lru. Кеш не разрастётся и не съест сервер.

Живая экосистема. В 2026 году актуальная ветка — Redis 8.10 (последний патч 8.10.1 вышел 17 августа 2026 года), а версии 7.2 и 7.4 получают обновления безопасности до конца 2029 года. После смены лицензии на AGPLv3 проект вернулся в разряд open source; параллельно развивается форк Valkey под управлением Linux Foundation с лицензией BSD — он совместим по протоколу, и WordPress-плагины работают с ним без изменений.

Что это даёт на практике

Честный ответ: зависит от сайта. Объектный кеш ускоряет не «всё», а конкретные сценарии.

  • Заметно быстрее: админка, редактор записей, сайты с большим количеством плагинов, WooCommerce с тысячами товаров, каталоги с фильтрами, мультисайт.
  • Почти без разницы: лендинг из пяти страниц, блог с кешем страниц и без авторизованных пользователей, сайт, где база и так отвечает за единицы миллисекунд.

Ориентир — число запросов к базе на страницу. Если их 150–400 и генерация занимает сотни миллисекунд, Redis срежет и то, и другое в разы. Если запросов 30 и страница собирается за 60 мс, выигрыш будет косметическим. Мерить до и после обязательно — как в любой оптимизации, о чём подробно в гайде Как ускорить WordPress в 2026.

Как подключить Redis: пошагово

Шаг 1. Сам Redis на сервере

На VPS с Debian или Ubuntu хватит пакета из репозитория, но для свежей версии лучше подключить официальный репозиторий Redis. На шаред-хостинге он либо включён в тариф, либо недоступен — уточните у поддержки: без сервиса плагин бесполезен.

Минимальная настройка в /etc/redis/redis.conf:

maxmemory 256mb
maxmemory-policy allkeys-lru
bind 127.0.0.1
protected-mode yes

Объём подбирают по размеру сайта: 128–256 МБ хватает среднему проекту, крупному магазину может понадобиться гигабайт и больше. Политика allkeys-lru важна принципиально: со значением по умолчанию (noeviction) при заполнении памяти Redis начнёт отвечать ошибками на запись вместо того, чтобы освобождать место.

Безопасность. Redis не должен смотреть в интернет. Держите его на 127.0.0.1 или на Unix-сокете, а если сервис на отдельной машине — закройте порт файрволом и задайте пароль через requirepass. Открытый наружу Redis без пароля — классический способ отдать сервер посторонним; общий чек-лист по защите сайта есть в статье Безопасность WordPress.

Шаг 2. PHP-расширение

PHP должен уметь разговаривать с Redis. Вариантов три:

  • PhpRedis — нативное расширение из PECL, самый быстрый и рекомендуемый вариант (apt install php8.3-redis или через pecl install redis).
  • Predis — клиент на чистом PHP, работает без расширения, но медленнее. Запасной вариант, если доступа к установке расширений нет.
  • Relay — коммерческое расширение от тех же авторов, что и плагин: держит копию кеша прямо в памяти PHP и обращается к Redis только за изменениями.

Проверить, что расширение подхватилось: php -m | grep redis. Не забудьте перезапустить PHP-FPM.

Шаг 3. Плагин и drop-in

Стандартное решение — бесплатный плагин Redis Object Cache Тилля Крюсса: свыше 400 000 активных установок, актуальная версия 2.8.0, требует PHP 7.2 или новее, поддерживает PhpRedis, Predis и Relay, а также репликацию, Sentinel и кластер.

После активации плагин сам по себе ничего не кеширует — нужно нажать «Enable Object Cache» в его настройках. По этой кнопке плагин копирует свой drop-in в wp-content/object-cache.php. Через WP-CLI то же самое делается двумя командами:

wp plugin install redis-cache --activate
wp redis enable
wp redis status

Для крупных проектов есть платная версия Object Cache Pro — с поддержкой TLS, мониторингом состояния, аналитикой и более агрессивной сериализацией. На типовом сайте бесплатной версии достаточно.

Шаг 4. Константы в wp-config.php

Настройки задаются до подключения плагина, в wp-config.php:

define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_DATABASE', 0 );
define( 'WP_REDIS_PREFIX', 'site1:' );
define( 'WP_REDIS_MAXTTL', 86400 );

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

Как убедиться, что кеш работает

Установленный плагин ещё не значит работающий кеш. Проверьте по трём точкам:

  1. Статус в плагине. На странице настроек должно быть «Connected», указан используемый клиент (PhpRedis) и растущий hit ratio. Процент попаданий выше 90 % — норма.
  2. Со стороны Redis. Команда redis-cli info stats покажет keyspace_hits и keyspace_misses; redis-cli info memory — сколько памяти реально занято. Если ключей нет вовсе, WordPress до Redis не достучался.
  3. Число запросов к базе. Включите SAVEQUERIES или воспользуйтесь Query Monitor и сравните количество запросов на одной и той же странице до и после. Падение со 200 до 40 — типичная картина.

Типичные грабли

Кеш не сбрасывается после деплоя. Обновили плагин или тему — а сайт отдаёт старые данные. Лечится командой wp cache flush в скрипте выкладки. Полезно также менять WP_CACHE_KEY_SALT при крупных изменениях.

Осиротевший drop-in. Плагин удалили, а файл object-cache.php остался — сайт падает с фатальной ошибкой при недоступном Redis. Отключать нужно через «Disable Object Cache» или wp redis disable, а не удалением плагина.

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

Слишком мало памяти. При заполненном maxmemory и политике noeviction запись начинает возвращать ошибку, и hit ratio уходит вниз. Следите за evicted_keys в info stats: постоянно растущее значение — сигнал добавить памяти.

Redis, Memcached или APCu

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

APCu не требует отдельного сервиса, но не масштабируется дальше одной машины; SQLite Object Cache — компромисс для шаред-хостинга. Практическое правило: один VPS и простой сайт — можно начать с APCu; магазин, мультисайт, несколько серверов или планы на рост — сразу Redis.

Когда объектный кеш не нужен

Не подключайте Redis «на всякий случай». Если сайт статичный, посещаемость невысокая, а страница генерируется за десятки миллисекунд, вы добавите ещё один сервис — который нужно обновлять, мониторить и защищать — ради выигрыша, которого никто не заметит. Сначала измерьте, потом внедряйте.

Коротко

Объектный кеш в WordPress по умолчанию живёт ровно один запрос. Redis превращает его в постоянное общее хранилище и снимает с базы основную часть повторяющихся запросов — особенно там, где кеш страниц бессилен: в админке, корзине, личном кабинете и API. Подключение занимает полчаса: сервис на сервере, расширение PhpRedis, плагин Redis Object Cache, четыре константы в wp-config.php. Дальше остаётся проверить hit ratio, настроить лимит памяти с политикой allkeys-lru и не забыть про сброс кеша при деплое.

Частые вопросы

Q.Чем объектный кеш отличается от кеша страниц?

Кеш страниц сохраняет готовый HTML и отдаёт его анонимным посетителям, минуя PHP и базу. Объектный кеш ускоряет саму генерацию страницы и работает там, где HTML закешировать нельзя: в админке, корзине и оформлении заказа, личном кабинете, поиске, REST API и AJAX. Они не конфликтуют — обычно их включают вместе.

Q.Нужен ли Redis, если у меня уже стоит плагин кеширования страниц?

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

Q.Что произойдёт с сайтом, если Redis упадёт?

Современные версии плагина Redis Object Cache стараются мягко деградировать до обычного непостоянного кеша, то есть сайт продолжает работать, но медленнее. Поведение стоит проверить заранее на тестовом окружении. Опасен другой случай: плагин удалили, а drop-in wp-content/object-cache.php остался — тогда возможна фатальная ошибка.

Q.Можно ли использовать один Redis для нескольких сайтов?

Да, но каждому сайту нужно задать свой префикс ключей (WP_REDIS_PREFIX) или отдельный номер базы (WP_REDIS_DATABASE). Иначе сайты будут пересекаться по ключам, а сброс кеша на одном обнулит кеш у всех.

Источники

Предыдущая
Как тестировать AI-агента: гайд по evals

Читайте также

Монитор на рабочем столе разработчика с отчётом автоматических тестов: список пройденных и упавших проверок, синие графики доли успешных прогонов; рядом второй экран с логами в терминалеЗаметки
18 августа 2026 г.

Как тестировать AI-агента: гайд по evals

Агента мало проверить «на глазок»: правильный ответ он может получить по неправильному пути. Разбираем, как построить автоматические проверки (evals) — что складывать в датасет, чем оценивать, какие метрики важны и почему один прогон ничего не доказывает.

Читать →
Тёмная графитовая комната, крупным планом широкий монитор с шестью параллельно работающими терминальными панелями — метафора нескольких агентов, работающих одновременноЗаметки
17 августа 2026 г.

Мультиагентные системы простыми словами

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

Читать →
Крупный план монитора, на экране наполовину написанный ответ модели с мигающим курсором; на заднем плане в расфокусе терминал и редактор кодаЗаметки
16 августа 2026 г.

Стриминг ответов модели: как текст появляется по мере генерации

Как устроен стриминг ответов языковой модели: SSE под капотом, события у Claude, OpenAI и Gemini, буферизация на прокси, обрывы соединения и чек-лист внедрения.

Читать →