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 — метрики и алерты