Повільна база даних — найчастіша причина сайту, що гальмує на спільному хостингу. Кеш в оперативній памʼяті знімає більшу частину навантаження з 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