Redis — это хранилище данных в оперативной памяти, и именно поэтому кеширование сайта через него даёт эффект «в разы»: чтение из RAM занимает микросекунды против миллисекунд у SQL-запроса с обращением к диску. Типичная страница WordPress делает 30–100 запросов к MySQL — с объектным кешем в Redis большинство из них исчезает, и TTFB падает с 800–1500 мс до 100–300 мс. В этой статье разберём установку Redis на Ubuntu 24.04 LTS, правильную настройку памяти и политики вытеснения, подключение к PHP и WordPress, а также замер результата цифрами, а не ощущениями.
Почему Redis такой быстрый и что он кеширует
Redis (REmote DIctionary Server) держит все данные в RAM и работает по простому протоколу «ключ — значение». Один инстанс на обычном VPS обрабатывает десятки тысяч операций в секунду. На практике сайту он полезен в четырёх ролях:
- Объектный кеш — результаты SQL-запросов и готовые объекты CMS (самый заметный эффект);
- Кеш страниц/фрагментов — собранные HTML-блоки, меню, виджеты;
- Хранилище сессий PHP — быстрее файлов и переживает балансировку между серверами;
- Очереди и счётчики — задачи Laravel Queue, rate limiting, «онлайн сейчас».
Важно понимать: Redis не заменяет базу данных, а разгружает её. MySQL остаётся источником истины, Redis — быстрой «прослойкой» перед ним. Предполагаем, что стек у вас уже развёрнут — если нет, начните с установки LEMP на Ubuntu.
Установка Redis на Ubuntu 24.04
В репозитории Ubuntu 24.04 лежит Redis 7 — ставится одной командой:
sudo apt update
sudo apt install -y redis-server
redis-cli ping
Ответ PONG означает, что сервер запущен и слушает 127.0.0.1:6379. Проверить версию и автозапуск:
redis-server --version
systemctl status redis-server
На NVMe-дисках VPS Cheap-Host установка занимает секунды, а фоновые снапшоты Redis на диск не создают заметной нагрузки.
Настройка памяти: maxmemory и политика вытеснения
Главная ошибка новичков — оставить Redis без лимита памяти. Кеш будет расти бесконечно, пока не начнёт душить MySQL и PHP-FPM. Открываем /etc/redis/redis.conf и задаём:
maxmemory 2gb
maxmemory-policy allkeys-lru
Политика решает, что делать при заполнении лимита:
| Политика | Поведение | Когда использовать |
|---|---|---|
allkeys-lru | Вытесняет самые давно не читанные ключи | Чистый кеш — правильный выбор для сайта |
volatile-lru | Вытесняет только ключи с TTL | В одном инстансе смешаны кеш и важные данные |
allkeys-lfu | Вытесняет наименее часто используемые | Большой кеш с «горячим ядром» ключей |
noeviction | Ошибка записи при заполнении | Очереди, где терять задачи нельзя |
Сколько выделить? Для объектного кеша одного сайта хватает 256–512 МБ, магазину — 1–2 ГБ. На тарифе Pro у Cheap-Host (16 ГБ RAM за 750 ₽/мес) спокойно уживаются MySQL, PHP-FPM и Redis с лимитом 2 ГБ. Как делить память между сервисами — считали в статье про объём RAM для сервера.
Минимальная безопасность
Открытый в интернет Redis без пароля — классическая дыра, через которую серверы попадают в ботнеты. Чек-лист из трёх пунктов в том же redis.conf:
- Слушаем только локальный интерфейс (в Ubuntu так по умолчанию — проверьте):
bind 127.0.0.1 -::1 - Ставим пароль:
requirepass Длинный_Случайный_Пароль_64_символа - Порт 6379 не открываем в UFW — снаружи он не нужен вообще.
Применяем настройки и проверяем авторизацию:
sudo systemctl restart redis-server
redis-cli -a 'Длинный_Случайный_Пароль_64_символа' ping
Подключаем Redis к PHP и WordPress
PHP общается с Redis через расширение phpredis:
sudo apt install -y php-redis
sudo systemctl restart php8.3-fpm
php -m | grep redis
Дальше зависит от приложения:
- WordPress. Ставим плагин Redis Object Cache, в
wp-config.phpдо строки «That's all» добавляем:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'Длинный_Случайный_Пароль_64_символа');
define('WP_CACHE_KEY_SALT', 'mysite_');
и жмём «Enable Object Cache» в настройках плагина. Остальные приёмы разгона CMS — в статье как ускорить WordPress.
- Laravel. В
.env:CACHE_STORE=redis,SESSION_DRIVER=redis,QUEUE_CONNECTION=redisплюс параметрыREDIS_HOSTиREDIS_PASSWORD. - Сессии PHP для любого сайта. В
/etc/php/8.3/fpm/php.ini:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=Длинный_Случайный_Пароль_64_символа"
Измеряем эффект цифрами
Через час-другой работы кеша смотрим статистику:
redis-cli -a 'пароль' info stats | grep keyspace
Интересуют два числа: keyspace_hits (запрос нашёлся в кеше) и keyspace_misses (пришлось идти в базу). Hit rate = hits / (hits + misses); хороший показатель — выше 80–90%. Заодно полезно сравнить TTFB до и после:
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\n" https://example.com/
Типичная картина для WordPress на среднем VPS: 0.9–1.4 с до включения объектного кеша и 0.15–0.35 с после. Нагрузка на MySQL при этом падает кратно — это видно по htop. Помните, что Redis снимает нагрузку с базы, но не с PHP: если воркеры FPM настроены неправильно, узкое место останется — проверьте себя по гайду по оптимизации PHP-FPM.
Эксплуатация: что мониторить
redis-cli -a 'пароль' info memory— полеused_memory_humanне должно упираться в maxmemory постоянно (иначе кеш «крутится» слишком быстро — добавьте памяти);evicted_keysвinfo stats— быстрый рост означает нехватку лимита;redis-cli --latency— на локальном сокете/loopback задержка должна быть меньше 1 мс;- очистка кеша при деплое:
redis-cli -a 'пароль' flushdb(только базу кеша, неflushall, если в Redis живут ещё и сессии).
FAQ
Сколько памяти выделить Redis?
Для объектного кеша типичного сайта — 256–512 МБ, для магазина или нескольких проектов — 1–2 ГБ. Главное — явно задать maxmemory и политику вытеснения, иначе Redis будет расти, пока не съест всю свободную RAM.
Данные в Redis пропадут после перезагрузки сервера?
По умолчанию Redis периодически сохраняет снапшоты на диск (RDB), так что большая часть данных переживёт перезагрузку. Для чистого кеша это неважно — он просто прогреется заново. Для сессий и очередей включите более частые сохранения или AOF.
Redis или Memcached — что выбрать?
Для большинства проектов — Redis: он умеет всё то же, что Memcached, плюс структуры данных, персистентность, TTL на ключ и очереди. Memcached имеет смысл только там, где он уже исторически используется.
Можно ли ставить Redis на сервер с 1–2 ГБ RAM?
Можно, если ограничить maxmemory 128–256 МБ и следить за остальными сервисами. Но для связки сайт + база + Redis комфортнее 8–16 ГБ — например, тариф Pro у Cheap-Host с 16 ГБ RAM за 750 ₽/мес.
Как проверить, что кеш реально работает?
Выполните redis-cli info stats и посмотрите keyspace_hits и keyspace_misses. Hit rate выше 80–90% означает, что большинство запросов обслуживается из памяти, минуя базу данных.
Вывод
Redis — самый дешёвый способ ускорить сайт в разы: 25 минут на установку и настройку, полгигабайта RAM — и база данных перестаёт быть узким местом, а TTFB падает в 3–5 раз. Формула проста: apt install redis-server, лимит maxmemory с политикой allkeys-lru, пароль, расширение php-redis и объектный кеш в CMS. Если под сайт с Redis нужен сервер с запасом памяти — у Cheap-Host тариф Pro от 750 ₽/мес: 12 vCPU, 16 ГБ RAM, NVMe, KVM, безлимитный трафик и выдача за минуту. Подробности — на cheap-host.onl.