Memcached WordPress: настройка объектного кэша и ускорение сайта в 7 шагов

Почему Memcached важен для WordPress

WordPress генерирует HTML‑страницы в реальном времени, обращаясь к базе данных при каждом запросе. При росте трафика это приводит к высокому CPU и замедлению отклика. Memcached – распределенный кеш в памяти, который хранит результаты запросов, сокращая обращения к MySQL до нуля.

Подготовка сервера: установка Memcached

Перед тем как подключать кеш к WordPress, необходимо установить сам сервис и PHP‑расширение.

  1. Обновите репозитории и установите memcached:
    sudo apt-get update && sudo apt-get install memcached libmemcached-tools
  2. Проверьте статус сервиса:
    systemctl status memcached
  3. Установите PHP‑модуль (пример для PHP 8.1):
    sudo apt-get install php8.1-memcached
  4. Перезапустите PHP‑FPM/Apache:
    systemctl restart php8.1-fpm   # или apache2

После перезапуска выполните php -m | grep memcached – модуль должен появиться в списке.

Настройка объектного кэша в WordPress

WordPress поддерживает объектный кэш через WP_Object_Cache. Для работы с Memcached необходимо добавить файл object-cache.php в корень wp-content. Самый простой способ – использовать готовый плагин.

Вариант 1: Плагин Memcached Object Cache

  • Установите и активируйте плагин через админку.
  • В настройках укажите хост 127.0.0.1, порт 11211 и опциональный префикс.
  • Сохраните изменения – плагин автоматически создаст object-cache.php.

Вариант 2: Ручная интеграция

Если хотите полностью контролировать код, скачайте wp-memcached-object-cache и разместите файлы в wp-content:

// wp-content/object-cache.php
if ( ! defined( 'ABSPATH' ) ) {
    exit; // Защита от прямого доступа
}

$memcached = new Memcached();
$memcached->addServer( '127.0.0.1', 11211 );

class WP_Memcached_Object_Cache {
    private $mc;
    public function __construct( $mc ) { $this->mc = $mc; }
    public function get( $key, $group = 'default' ) {
        return $this->mc->get( $this->id( $key, $group ) );
    }
    public function set( $key, $data, $group = 'default', $expire = 0 ) {
        return $this->mc->set( $this->id( $key, $group ), $data, $expire );
    }
    // … остальные методы (delete, replace, flush) …
    private function id( $key, $group ) {
        return $group . ':' . $key;
    }
}

global $wp_object_cache;
$wp_object_cache = new WP_Memcached_Object_Cache( $memcached );

После загрузки файлов очистите кеш WordPress: wp cache flush.

Тестирование производительности

Чтобы убедиться, что кэш действительно ускорил сайт, проведём сравнение до и после включения Memcached.

Инструменты

  • GTmetrix – измеряет время загрузки и количество запросов к БД.
  • Плагин Query Monitor – показывает количество запросов MySQL в реальном времени.

Сценарий теста

  1. Отключите объектный кэш (плагин → деактивировать). Снимите скриншот «Queries» в Query Monitor – обычно 30‑50 запросов на главную страницу.
  2. Включите Memcached, очистите кеш и снова откройте страницу. Запросов должно стать менее 5, а время «Time to First Byte» сократится от 800 мс до 250‑300 мс.

Для более точных цифр запустите тест 10 раз и возьмите среднее. В большинстве реальных проектов наблюдается ускорение от 30 % до 65 %.

Советы по оптимизации и типичные ошибки

  • Не храните большие объекты. Memcached ограничен 1 МБ на запись; попытка кешировать большие массивы приводит к ошибкам.
  • Настройте TTL. Установите время жизни (TTL) 300‑600 секунд, чтобы данные обновлялись регулярно.
  • Проверяйте доступность сервера. Если Memcached падает, WordPress автоматически переключится на «no‑cache», но в логах появятся ошибки.
  • Комбинируйте с CDN. Для полной скорости используйте CDN‑решения – они обслуживают статический контент, а Memcached ускоряет динамический.

Полезные ресурсы

Если хотите углубиться в инфраструктуру, обратите внимание на статьи:

Следуя этим рекомендациям, вы получите быстрый, масштабируемый и надёжный сайт на WordPress.

❓ Часто задаваемые вопросы

Как проверить, что WordPress действительно использует Memcached?

Установите плагин Query Monitor и посмотрите в разделе «Object Cache». Если в логах появляются запросы к Memcached (memcached_get, memcached_set), кеш работает.

Можно ли использовать Memcached на совместном хостинге?

Да, если провайдер предоставляет доступ к Memcached‑серверу. Обычно требуется указать внешний хост и порт в настройках плагина.

Что делать, если объектный кеш не очищается после обновления записи?

Вызовите функцию wp_cache_flush() в коде темы/плагина или используйте кнопку «Очистить кеш» в плагине Memcached Object Cache.

Как одновременно использовать Memcached и Redis?

WordPress поддерживает только один объектный кеш. Можно использовать Memcached для кэша запросов, а Redis – для сессий и очередей, но включать их нужно в разных ролях.