Performance 10 мин чтения

WordPress Redis — Object Cache

Настройка Redis для WordPress: object caching, session storage, уменьшение нагрузки на MySQL. Сайт работает в разы быстрее.

WordPress делает сотни запросов к базе данных на каждой странице. Redis кеширует результаты этих запросов в памяти — повторные запросы выполняются в 10-100 раз быстрее.

Зачем Redis для WordPress

Без Redis каждый визит → запросы к MySQL:

  • Получить настройки сайта (wp_options)
  • Получить меню навигации
  • Получить посты для страницы
  • Получить метаданные постов
  • Получить пользователя

С Redis — большинство этих данных уже в памяти.

Установка Redis

На VPS (Ubuntu/Debian)

sudo apt update
sudo apt install redis-server

# Настройка
sudo nano /etc/redis/redis.conf
# maxmemory 256mb
# maxmemory-policy allkeys-lru

sudo systemctl restart redis
sudo systemctl enable redis

Docker Compose

services:
  redis:
    image: redis:7-alpine
    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
    volumes:
      - redis_data:/data
    restart: unless-stopped

volumes:
  redis_data:

Подключение к WordPress

Плагин Redis Object Cache

Самый популярный и надёжный способ:

# Через WP-CLI
wp plugin install redis-cache --activate
wp redis enable

Или добавьте в wp-config.php:

define('WP_REDIS_HOST', '127.0.0.1');  // или 'redis' для Docker
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_PASSWORD', ''); // если настроен пароль
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('WP_REDIS_PREFIX', 'wp_yoursite_'); // важно при нескольких сайтах

Проверка работы Redis

# Проверить подключение
redis-cli ping
# Ответ: PONG

# Посмотреть ключи WordPress
redis-cli keys "wp_yoursite_*"

# Статистика
redis-cli info stats

Через WP-CLI:

wp redis status
wp redis info

Тонкая настройка

Selectively cache (выборочный кеш)

// В wp-config.php — исключить некоторые группы
define('WP_REDIS_IGNORED_GROUPS', ['counts', 'plugins']);

Разные TTL для разных групп

define('WP_REDIS_GLOBAL_GROUPS', [
    'users',      // пользователи кешируются долго
    'userlogins',
    'usermeta',
]);

Redis + Page Cache

Для максимальной производительности:

  • Object Cache (Redis) — кеш данных PHP
  • Page Cache (Nginx) — кеш HTML страниц
# nginx.conf — page cache через Redis
location / {
    set $cache_key "page:$host$request_uri";
    # Проверить кеш Redis
    content_by_lua_block {
        local redis = require "resty.redis"
        local red = redis:new()
        red:connect("127.0.0.1", 6379)
        local cached = red:get(ngx.var.cache_key)
        if cached ~= ngx.null then
            ngx.say(cached)
            return
        end
        ngx.exec("@wordpress")
    }
}

Мониторинг

Инструменты для мониторинга Redis:

  • RedisInsight — GUI клиент
  • Redis Commander — веб-интерфейс в Docker
  • Grafana + Prometheus — метрики и алерты