Redis Object Cache для WordPress: Установка, Настройка и Ускорение Сайта в 5 Раз

Вы уже настроили Nginx как reverse proxy, увеличили memory_limit, настроили PHP-FPM и добавили кэширование через FastCGI? Отлично, но ваш сайт всё ещё может тормозить под нагрузкой. Проблема в том, что WordPress каждую секунду выполняет сотни запросов к базе данных, и это узкое место даже на продакшн-стеке.

В этом руководстве мы разберём, как использовать Redis Object Cache для ускорения WordPress в 3-5 раз. Это не просто «ещё один кэш», а решение, которое сокращает количество запросов к MySQL/MariaDB на 70-90%.

Почему Redis, а не Memcached или APCu?

Сравним основные кэш-хранилища для WordPress:

  • Redis — хранит данные в оперативной памяти, поддерживает сложные структуры данных (хэши, списки, множества), работает как кэш и как БД
  • Memcached — только простые ключ-значение, нет персистентности, не поддерживает сложные структуры
  • APCu — кэш только для одного процесса PHP, не работает в кластере

Для WordPress-сайтов с высокой нагрузкой Redis — лучший выбор. Он поддерживает:

  • Кэширование объектов (постов, терминов, пользователей)
  • Кэширование запросов (query cache)
  • Кэширование сессий (если настроен)
  • Очереди задач (для асинхронных операций)

Как Redis ускоряет WordPress

Без Redis WordPress выполняет запросы к базе данных для:

  • Каждого поста в списке
  • Каждого термина таксономии
  • Каждого пользователя
  • Каждого настройки плагина

С Redis эти данные хранятся в оперативной памяти и доступны за 0.1-0.5 мс вместо 10-50 мс для MySQL. Это уменьшает нагрузку на базу данных и ускоряет сайт.

Шаг 1: Установка Redis на сервер

Для начала установим Redis-сервер на ваш VPS:

# Установка Redis
sudo apt update && sudo apt install -y redis-server

# Включение автозапуска
sudo systemctl enable --now redis-server

# Проверка работы
redis-cli ping
# Должно вернуть PONG

Базовая настройка Redis

Редактируем конфигурационный файл:

sudo nano /etc/redis/redis.conf

Важные параметры:

# Ограничение использования памяти (50% от RAM)
maxmemory 2gb
maxmemory-policy allkeys-lru

# Включение персистентности (опционально)
save 900 1
save 300 10
save 60 10000
# Применяем изменения
sudo systemctl restart redis-server

Шаг 2: Настройка WordPress для Redis

Теперь подключим WordPress к Redis. Для этого установим плагин и настроим wp-config.php.

Установка плагина Redis Object Cache

Через wp-cli (рекомендуется):

cd /var/www/wordpress/wp-content/plugins
wget https://downloads.wordpress.org/plugin/redis-cache.latest-stable.zip
unzip redis-cache.latest-stable.zip
rm redis-cache.latest-stable.zip

Или через админку WordPress → Плагины → Добавить новый → Поиск «Redis Object Cache».

Настройка wp-config.php

Добавьте в wp-config.php (перед строкой «That’s all, stop editing!»):

define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', '' );
define( 'WP_REDIS_DATABASE', 0 );
define( 'WP_CACHE_KEY_SALT', 'custom-code-ru:' );

Шаг 3: Активация и настройка кэширования

Перейдите в админку WordPress → Настройки → Redis → Enable Object Cache.

После активации проверьте статус:

// Создайте файл в корне сайта
<?php
echo wp_cache_get( 'test', 'test' ) ? 'Кэш работает' : 'Кэш не работает';
wp_cache_set( 'test', 'test', 'test' );
?>

Критически важные настройки:

  • Enable Object Cache — включает основное кэширование
  • Enable Object Cache for Admin — кэширует запросы в админке (опционально)
  • Enable Group Caching — включает кэширование по группам
  • Enable Redis Object Cache Debugging — временно включите для отладки

Шаг 4: Интеграция с Nginx (ускорение в 2 раза)

Ранее мы настроили FastCGI-кэш на уровне Nginx, но это кэширует только HTML-страницы. Чтобы кэшировать и объекты WordPress, добавим кэширование через Redis.

Создадим конфиг Nginx:

location / {
    try_files $uri $uri/ /index.php?$args;
    
    # Кэширование статики
    expires 30d;
    add_header Cache-Control "public, immutable";
}

# Кэширование динамических страниц через Redis
location ~* \.php$ {
    set $no_cache 0;
    
    # Не кэшировать админку и формы
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap") {
        set $no_cache 1;
    }
    
    # Кэширование через Redis
    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 60m;
    fastcgi_cache_bypass $no_cache;
    fastcgi_no_cache $no_cache;
    
    # Передача информации о кэше в заголовок
    add_header X-Redis-Cache $upstream_cache_status;
}

Добавим в конфиг Redis Object Cache:

// Добавьте в wp-config.php
define( 'WP_REDIS_OBJECT_CACHE', true );
define( 'WP_REDIS_DATABASE', 1 );
define( 'WP_REDIS_MAX_KEYS', 1000 );
define( 'WP_REDIS_MAX_EXPIRY', 300 ); // 5 минут

Шаг 5: Проверка работы кэширования

После настройки проверьте, что кэш работает:

Через wp-cli:

wp redis info
# Должен вернуть информацию о состоянии кэша

Через Query Monitor:

Установите плагин Query Monitor и проверьте:

  • Количество запросов к БД должно упасть с 200-300 до 10-20
  • Среднее время запроса должно уменьшиться с 10-50 мс до 0.1-0.5 мс

Через браузер:

Добавьте в .htaccess:

# Добавление заголовка кэширования
Header set X-Redis-Cache "%{REDIS_CACHE}e" env=REDIS_CACHE

После этого при каждом запросе в ответе будет заголовок X-Redis-Cache: HIT или X-Redis-Cache: MISS.

Шаг 6: Автоматическая очистка кэша

WordPress должен автоматически очищать кэш при обновлении постов, комментариев и настроек. Для этого:

В wp-config.php:

// Автоматическая очистка кэша при обновлении
add_action( 'save_post', 'wp_cache_flush' );
add_action( 'comment_post', 'wp_cache_flush' );
add_action( 'wp_update_comment', 'wp_cache_flush' );
add_action( 'delete_comment', 'wp_cache_flush' );
add_action( 'switch_theme', 'wp_cache_flush' );

Или через плагин:

Установите плагин «Redis Object Cache Clear» и настройте триггеры очистки кэша.

Шаг 7: Расширенная настройка

Для продакшн-сайтов добавим расширенные настройки:

Увеличение срока хранения кэша для статических объектов:

// Добавьте в wp-config.php
function redis_object_cache_set_ttl( $group, $key, $ttl ) {
    if ( in_array( $group, [ 'posts', 'terms', 'users' ] ) ) {
        return 3600; // 1 час
    }
    return $ttl;
}
add_filter( 'redis_object_cache_set_ttl', 'redis_object_cache_set_ttl', 10, 3 );

Настройка кэширования для WooCommerce:

// Добавьте в wp-config.php
add_filter( 'redis_object_cache_groups', function( $groups ) {
    $groups[] = 'woocommerce';
    $groups[] = 'wc_session';
    $groups[] = 'wc_transients';
    return $groups;
} );

Чек-лист для оптимальной работы

  • Redis установлен и работает (проверьте через redis-cli ping)
  • Плагин Redis Object Cache активирован
  • wp-config.php содержит правильные настройки
  • Кэш работает (проверьте через Query Monitor)
  • Кэш автоматически очищается при обновлениях
  • Настроено кэширование для WooCommerce (если используется)
  • Проверена работа кэша через X-Redis-Cache заголовок
  • Настроены лимиты памяти в Redis (maxmemory)

Что делать, если кэш не работает?

Кэш работает, но сайт медленно грузится

Если количество запросов к БД уменьшилось, но сайт всё ещё медленный:

  • Проверьте Frontend-оптимизацию (Lighthouse, GTmetrix)
  • Убедитесь, что Nginx правильно кэширует статику
  • Проверьте, что JavaScript/CSS оптимизированы
  • Используйте плагин «Perfmatters» для отключения ненужных скриптов

Ошибка «Redis server went away»

Это означает, что WordPress не может подключиться к Redis. Проверьте:

  • Работает ли Redis: sudo systemctl status redis-server
  • Правильный ли хост и порт в wp-config.php
  • Не блокирует ли брандмауэр порт 6379
  • Достаточно ли памяти на сервере (проверьте через free -h)

Сайт не обновляется после изменений

Если вы обновили пост, но изменения не отображаются:

  • Проверьте, что кэш автоматически очищается
  • Убедитесь, что в wp-config.php нет ошибок в настройках кэширования
  • Попробуйте вручную очистить кэш через админку

Сравнение скорости до и после Redis

Метрика Без Redis С Redis
Количество запросов к БД 250-300 10-20
Среднее время запроса к БД 15-50 мс 0.1-0.5 мс
Время загрузки страницы 1.2-2.5 с 0.3-0.6 с
Нагрузка на сервер Высокая Низкая

Что дальше: ускорение через Redis Cluster

Если ваш сайт выходит за пределы одного сервера, настройте Redis Cluster для распределения нагрузки и отказоустойчивости:

# Установка Redis Cluster
sudo apt install -y redis-cli
redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 --cluster-replicas 1

В wp-config.php укажите несколько хостов:

define( 'WP_REDIS_SERVERS', [
    'tcp://192.168.1.1:6379',
    'tcp://192.168.1.2:6379',
    'tcp://192.168.1.3:6379'
] );
define( 'WP_REDIS_CLUSTER', true );

Это позволяет масштабироваться до миллионов запросов в минуту.

Перелинковка с другими статьями

Выводы

Redis Object Cache — это обязательный компонент для любого продакшн-сайта WordPress. Он:

  • Сокращает количество запросов к базе данных на 70-90%
  • Ускоряет время загрузки страницы в 3-5 раз