Медленная база данных — самая частая причина тормозящего сайта на общем хостинге. Кеш в оперативной памяти снимает большую часть нагрузки с MySQL, и ISPmanager 6 умеет ставить Redis и Memcached в пару кликов. Разберём, чем они отличаются и как их подключить.
Чем Redis отличается от Memcached
| Параметр | Redis | Memcached |
|---|---|---|
| Типы данных | Строки, списки, хеши, множества | Только строки |
| Сохранение на диск | Есть, опционально | Нет, только память |
| Типичное применение | Кеш объектов, очереди, сессии | Простой кеш страниц и фрагментов |
Для WordPress и большинства CMS Redis подходит лучше: он переживает перезапуск процесса, если включено сохранение на диск, и его проще использовать для очередей задач.
Установка Redis через панель
Откройте «Настройки» → «Возможности» → найдите пункт Redis и нажмите «Установить». ISPmanager 6 сам добавит сервис в автозагрузку и откроет сокет только для локальных подключений на порту 6379.
Проверить, что служба запущена, можно из консоли сервера:
systemctl status redis
redis-cli ping
Команда redis-cli ping должна вернуть PONG — это значит, что сервис принимает подключения.
Установка Memcached через панель
Memcached ставится тем же способом: «Настройки» → «Возможности» → Memcached → «Установить». По умолчанию сервис слушает порт 11211 и ограничивает объём памяти под кеш, обычно 64 МБ на сайт — значение можно увеличить в настройках модуля при большом количестве объектов кеша.
systemctl status memcached
echo stats | nc 127.0.0.1 11211
Команда echo stats показывает число хранимых ключей и процент попаданий в кеш — по нему видно, реально ли кеш снижает нагрузку на базу.
Подключение кеша к WordPress
Для Redis установите плагин Redis Object Cache и укажите в его настройках хост 127.0.0.1 и порт 6379 — плагин сам создаст файл object-cache.php в каталоге wp-content. Для Memcached подойдёт плагин W3 Total Cache с включённым модулем Object Cache и адресом 127.0.0.1:11211.
После подключения любого кеша проверьте, что сайт открывает страницы админки без ошибок: неверный порт или заблокированный файрволом сокет приводят к белому экрану вместо явной ошибки.
Кеш после переноса или клонирования сайта
Если сайт переносили на другой сервер, старые ключи кеша будут указывать на прежние данные — обязательно очистите Redis или Memcached сразу после переноса, иначе клиент увидит устаревший контент. Порядок переноса сайтов описан в статье про перенос сайта между серверами ISPmanager 6.
Очистить кеш Redis из консоли можно командой:
redis-cli FLUSHALL
Итог: как выбрать и проверить кеш
- Для WordPress и CMS с объектами выбирайте Redis
- Для простого кеша фрагментов страниц достаточно Memcached
- Ставьте сервис через «Настройки» → «Возможности», не через сторонние репозитории
- Проверяйте статус командой systemctl status и пинг сервиса из консоли
- Очищайте кеш после переноса сайта или смены домена
Если ресурсов сервера не хватает даже с кешем, стоит пересмотреть тариф VDS — подробнее о лицензиях и мощности серверов ISPmanager 6 в статье про лицензии ISPmanager 6.
Типичные ошибки Redis и Memcached в ISPmanager
| Сообщение | Причина |
|---|---|
| redis-cli: NOAUTH Authentication required | В конфиге включён requirepass (панель иногда включает пароль по умолчанию при обновлении), а плагин WordPress подключается без него |
| Connection refused при echo stats | nc 127.0.0.1 11211 | Memcached не запустился после установки, либо упал из-за нехватки памяти в лимите модуля |
| PHP Warning: Redis::connect(): connection refused | В PHP не установлено расширение redis — проверяется через php -m; сам сервис Redis при этом может работать исправно |
| OOM command not allowed when used memory > maxmemory | Достигнут лимит maxmemory для Redis при политике вытеснения по умолчанию noeviction — для кеша нужна политика allkeys-lru |
| Кеш опустел сам после обновления панели | Обновление ISPmanager иногда перезапускает сервисы Redis и Memcached — для Memcached это всегда полная потеря кеша, для Redis зависит от персистентности |
Когда Redis или Memcached через панель не подходят
- Сайт работает на нескольких серверах за балансировщиком — локальный кеш на одном узле не увидят остальные ноды, нужен вынесенный кеш-сервер или managed Redis
- Нужна гарантированная персистентность без потери данных при рестарте — Memcached принципиально не сохраняет данные на диск, для этого годится только Redis с включённым AOF или RDB
- Объём кешируемых данных превышает доступную оперативную память тарифа — оба варианта хранят всё в RAM, при нехватке памяти начинается вытеснение ключей или падение сервиса
- Нужен full-page cache с инвалидацией по тегам — Redis Object Cache кеширует объекты WordPress, а не HTML целиком; для кеша страниц нужен отдельный модуль вроде Nginx FastCGI cache
Проверка результата
После подключения кеша проверяйте не только факт запуска сервиса, но и то, что PHP реально видит нужное расширение — иначе сайт продолжит ходить напрямую в MySQL без всякой ошибки. О работе с другими сервисами в ISPmanager 6 — в статьях про базы данных и про Node.js и Python в панели.
# Сравнить объём памяти, занятой Redis, с лимитом сервера
redis-cli INFO memory | grep used_memory_human
# Убедиться, что PHP реально видит расширение redis
php -m | grep -i redis