С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Redis — хранилище ключ-значение в памяти

4 мин Ubuntu 24.04 · Redis 7

Кэш, очереди и сессии в оперативной памяти; KEYS * блокирует сервер на больших базах — вместо неё используй --scan.

Шпаргалка

6 команд Версия для печати
  • redis-cli ping проверить, что сервер жив (ответ PONG)
  • redis-cli info memory текущее потребление памяти
  • redis-cli --bigkeys найти самые крупные ключи
  • redis-cli --scan --pattern 'x:*' безопасный обход ключей, не блокирует сервер
  • redis-cli slowlog get 10 10 последних медленных команд
  • redis-cli config set maxmemory 512mb изменить параметр на лету

Обзор

Redis — быстрое хранилище ключ-значение в оперативной памяти (кэш, очереди, сессии, брокер для Channels/Celery). Служба redis-server под systemd, порт 6379, конфиг /etc/redis/redis.conf.

bash
systemctl status redis-server
redis-cli ping                    # → PONG, если жив
ss -tlnp | grep 6379              # слушает ли (см. ss)

Конфигурация

Ключевое в /etc/redis/redis.conf:

bind 127.0.0.1                    # слушать только локально (безопасно по умолчанию)
requirepass СЕКРЕТ                # пароль (ОБЯЗАТЕЛЬНО, если открыт по сети)
maxmemory 256mb
maxmemory-policy allkeys-lru      # что выкидывать при заполнении (для кэша)
appendonly yes                    # персистентность AOF (durable)
save 900 1                        # RDB-снапшот: если ≥1 изменение за 900с
  • RDB — периодические снапшоты (компактно, можно потерять последние секунды).
  • AOF (appendonly yes) — журнал операций (durable, восстановление точнее).

Менять на лету без рестарта: redis-cli config set maxmemory 512mb + config rewrite. После правки файла — sudo systemctl restart redis-server.

Рецепты

1

redis-cli

bash
redis-cli                         # интерактивная консоль
redis-cli -a СЕКРЕТ               # с паролем (или AUTH внутри)
redis-cli info server             # версия, аптайм
redis-cli info memory             # потребление памяти
redis-cli info clients            # число подключений
redis-cli dbsize                  # число ключей
redis-cli --scan --pattern 'x:*'  # БЕЗОПАСНЫЙ обход ключей (не блокирует)
redis-cli set k v ex 60           # записать ключ со сроком жизни 60 секунд
redis-cli get k                   # прочитать ключ
redis-cli ttl k                   # сколько секунд осталось жить ключу
redis-cli del k                   # удалить ключ
redis-cli --bigkeys               # найти крупные ключи (что ест память)
redis-cli monitor                 # поток ВСЕХ команд (отладка; даёт нагрузку!)
redis-cli slowlog get 10          # 10 последних медленных команд

Неполадки

5

Could not connect to Redis (6379)

Служба не запущена (systemctl status redis-server) или слушает только 127.0.0.1, а клиент идёт по сети. Для сети — поправь bind + обязательно requirepass (открытый Redis = мгновенный взлом).

OOM / выросло потребление памяти

redis-cli info memory, --bigkeys. Для кэша задай maxmemory + maxmemory-policy, иначе Redis съест всю RAM и его убьёт OOM-killer (см. memory-swap).

Данные пропали после рестарта

По умолчанию данные только в памяти. Включи персистентность (appendonly yes и/или save), если данные важны.

Тормозит / высокая задержка

redis-cli --latency, slowlog get. Частые причины: KEYS/SMEMBERS по огромным структурам, swap (Redis НЕ должен свопиться — см. memory-swap), фоновый RDB-fork при нехватке памяти.

NOAUTH Authentication required

Задан requirepass — подключайся redis-cli -a СЕКРЕТ или AUTH первой командой.

Опасно

KEYS * перечисляет все ключи и блокирует сервер, пока не закончит — на базе с миллионами ключей это ощущается как полный отказ Redis для всех клиентов сразу; вместо неё используй --scan, который не блокирует. FLUSHALL/FLUSHDB стирают все данные немедленно и без подтверждения — нет шага «точно?» и нет отмены. Redis без bind 127.0.0.1 и без requirepass, открытый в сеть, компрометируется почти мгновенно: не публикуй порт 6379 наружу без пароля.

См. также

  • systemctl — Управление службами systemd — start/stop/restart/status/enable/reload.
  • ss — Кто слушает порты и какие соединения открыты — современная замена netstat.
Загрузка…