hostprofi.ru
Подобрать хостинг
Термин·буква О

Объектный кэш WordPress

краткое определение

Механизм WordPress для хранения результатов SQL-запросов в Redis или Memcached между HTTP-запросами.

Объектный кеш WordPress (Object Cache) — механизм сохранения результатов PHP-вычислений и SQL-запросов в памяти для повторного использования без обращения к базе данных. Радикально снижает нагрузку на MySQL/MariaDB при высоком трафике.

Как работает

WordPress имеет встроенный Object Cache API: функции wp_cache_set(), wp_cache_get() позволяют плагинам сохранять данные в «объектном кеше». По умолчанию этот кеш живёт только в рамках одного HTTP-запроса (non-persistent). Persistent Object Cache подключает внешний бэкенд — Redis или Memcached, который сохраняет данные между запросами.

При включённом Redis Object Cache: первый запрос генерирует данные, сохраняет в Redis. Второй запрос забирает данные из Redis за 0.1-1 мс вместо SQL-запроса за 5-50 мс. На сайте с 10 SQL-запросами на страницу и Redis-кешем — 80-90% запросов обслуживается из памяти.

История

Object Cache API появился в WordPress 2.0 (2005). Первоначально предполагалось использование с Memcached — тогда стандартный кеш-сервер. После того как Redis (2009) показал более широкие возможности (pub/sub, sorted sets, persistence), плагин Redis Object Cache от Till Krüss (2014) стал стандартом. С WordPress 6.1 (2022) добавлены улучшения в Cache Group Flushing.

Установка Redis Object Cache

# Установить Redis на сервере
apt install redis-server
systemctl enable --now redis-server

# Установить PHP-расширение
apt install php-redis

# wp-config.php
define('WP_CACHE', true);
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);

# Установить плагин Redis Object Cache через WP CLI
wp plugin install redis-cache --activate
wp redis enable

Что кешируется

WordPress Object Cache сохраняет: запросы к опциям (wp_options — наиболее частые запросы), пользователи и метаданные, термины и таксономии, меню навигации, результаты WP_Query для часто используемых запросов. Плагины (WooCommerce, Advanced Custom Fields) активно используют Object Cache API для своих данных.

Объектный кеш vs Page Cache

Page Cache (Nginx FastCGI Cache, WP Super Cache) кеширует готовый HTML и отдаёт без выполнения PHP. Объектный кеш работает на уровне PHP, ускоряет генерацию страниц для залогиненных пользователей и персонализированного контента, который нельзя кешировать на уровне страниц. Оба вида кеша дополняют друг друга.

На что обращать внимание

Redis должен быть доступен локально (127.0.0.1) — задержка сети нивелирует выгоду кеша. Используйте Unix-socket вместо TCP для минимальной задержки: define('WP_REDIS_HOST', '/var/run/redis/redis.sock'). Мониторинг hit/miss ratio через Redis INFO: redis-cli info stats | grep hit. Hit ratio < 80% означает неэффективное кеширование — проверьте TTL и размер кеша. Swap для Redis нежелателен — кеш в свопе работает медленнее, чем без кеша.

Настройка Redis Object Cache на VPS

Установка объектного кэша начинается с сервера: нужно поднять Redis как системный сервис. На Ubuntu/Debian: apt install redis-server, затем настроить /etc/redis/redis.conf — указать maxmemory 256mb и maxmemory-policy allkeys-lru. После этого в WordPress устанавливается плагин Redis Object Cache и прописывается в wp-config.php: define('WP_REDIS_HOST', '127.0.0.1');.

После активации плагин показывает статистику: hit rate (процент запросов, обслуженных из кэша) и количество сохранённых объектов. Нормальный hit rate для WP — 70–90%. Если ниже — возможно, слишком короткий TTL или большой объём уникальных запросов (например, персонализированный контент для залогиненных пользователей).

Важно понимать разницу между объектным кэшем и страничным. Page Cache полностью кэширует HTML страниц и отдаёт их без запуска PHP — это максимальная экономия ресурсов. Объектный кэш работает на уровне PHP-процесса: PHP запускается, но не делает лишних запросов к БД. Для WordPress-сайтов с авторизованными пользователями, динамическими ценами или персонализированными блоками объектный кэш незаменим — страничный там неприменим, а без кэша каждый запрос нагружает MySQL.

Другие термины