Короткий ответ: Redis ставится командой apt install redis-server и по умолчанию слушает только 127.0.0.1 — это правильное поведение, менять его не нужно. Для проверки используется redis-cli ping, который должен вернуть PONG. Обязательные настройки для рабочего сервера: ограничение памяти maxmemory, политика вытеснения maxmemory-policy и пароль requirepass, если к базе обращается несколько приложений.
Redis — хранилище в оперативной памяти. Он не заменяет основную базу данных, а снимает с неё часть нагрузки: кэш, очереди, счётчики, блокировки, хранение сессий.
Установка и проверка
apt update
apt install -y redis-server
systemctl enable --now redis-server
redis-cli ping
Ответ PONG означает, что сервер работает. Проверить версию и адрес прослушивания:
redis-cli info server | grep redis_version
ss -tlnp | grep 6379
В выводе ss адрес должен быть 127.0.0.1:6379. Если там 0.0.0.0:6379 — база доступна из интернета, и это нужно немедленно исправить.
Когда Redis действительно нужен
| Задача | Что даёт Redis |
|---|---|
| Кэш страниц и запросов | Снимает повторяющиеся запросы с основной базы |
| Хранение сессий | Сессии переживают перезапуск приложения и работают при нескольких процессах |
| Очереди задач | Фоновые операции выполняются отдельно от пользовательского запроса |
| Счётчики и лимиты | Быстрый подсчёт обращений и ограничение частоты |
| Блокировки | Защита от одновременного выполнения одной операции |
Если приложение состоит из одного процесса и работает с небольшой базой, Redis не нужен — он добавит точку отказа, не дав выигрыша. Он окупается там, где есть повторяющиеся тяжёлые запросы или несколько процессов.
Настройка памяти — самое важное
Redis хранит данные в оперативной памяти и без ограничения займёт всю доступную. Это классическая причина падения сервера.
Файл /etc/redis/redis.conf, ключевые директивы:
maxmemory 512mb
maxmemory-policy allkeys-lru
supervised systemd
appendonly no
| Директива | Смысл |
|---|---|
maxmemory |
Потолок памяти. Ставить не более половины объёма ОЗУ сервера |
maxmemory-policy |
Что делать при достижении потолка: allkeys-lru для кэша, noeviction для очередей |
supervised systemd |
Управление службой через systemd |
appendonly |
Журнал операций. Для чистого кэша не нужен, для очередей обязателен |
Выбор политики вытеснения зависит от назначения. Для кэша подходит allkeys-lru: при заполнении удаляются давно не использованные ключи, и приложение просто перечитывает данные из основной базы. Для очередей и сессий нужен noeviction: лучше получить ошибку записи, чем молча потерять задачу.
После правки:
systemctl restart redis-server
redis-cli info memory | grep maxmemory_human
redis-cli config get maxmemory-policy
Пароль и доступ
requirepass ваш_длинный_пароль
При включённом пароле команды требуют аутентификации:
redis-cli -a ваш_длинный_пароль ping
Пароль нужен, если к Redis обращается несколько приложений или разные пользователи на одном сервере. Даже при прослушивании только локального адреса любой процесс на сервере сможет обратиться к базе без пароля.
Диагностика
| Команда | Что показывает |
|---|---|
redis-cli info clients |
Число подключений |
redis-cli info memory |
Потребление памяти и лимит |
redis-cli info stats |
Число попаданий и промахов кэша |
redis-cli info keyspace |
Сколько ключей в каждой базе |
redis-cli --bigkeys |
Крупнейшие ключи — частый источник проблем с памятью |
redis-cli monitor |
Поток команд в реальном времени. Только для отладки |
Соотношение попаданий и промахов — главный показатель полезности кэша. Если промахов больше, чем попаданий, либо время жизни ключей слишком мало, либо кэшируются данные, которые почти не повторяются.
Безопасность
- Не открывайте порт 6379 наружу. Это самая частая и самая опасная ошибка.
- Переименуйте опасные команды. Директива
rename-commandпозволяет отключитьFLUSHALLиCONFIGв рабочей среде. - Ограничьте память. Без
maxmemoryRedis вытеснит всё остальное с сервера. - Учтите, что данные в памяти. При перезапуске без журналирования кэш будет пуст — приложение должно это выдерживать.
Redis часто ставится рядом с PostgreSQL или MySQL: основная база хранит данные, Redis снимает повторяющиеся чтения. Для приложений на Node.js типовой набор — Node.js, PostgreSQL и Redis.
