linux-labs

Вики / Службы и systemd

Redis

Сервис Ubuntu 24.04 · Redis 7 СлужбыБазы данныхМониторинг

Хранилище ключ-значение в памяти — redis-cli, конфиг, персистентность, память.

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

systemctl status redis-server
redis-cli ping                    # → PONG, если жив
ss -tlnp | grep 6379              # слушает ли (см. ss)
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 get k ; redis-cli set k v ex 60 ; redis-cli ttl k ; redis-cli del k
redis-cli --bigkeys               # найти крупные ключи (что ест память)
redis-cli monitor                 # поток ВСЕХ команд (отладка; даёт нагрузку!)
redis-cli slowlog get 10          # 10 последних медленных команд

⚠️ KEYS * блокирует сервер на больших БД — всегда --scan. FLUSHALL/FLUSHDB стирают данные без подтверждения.

Ключевое в /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.

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 первой командой.

redis-cli ping                    # PONG?
redis-cli info memory ; redis-cli --bigkeys   # память / крупные ключи
redis-cli --scan --pattern 'x:*'  # обход ключей (не KEYS!)
redis-cli slowlog get 10 ; redis-cli --latency   # медленные/задержка
redis-cli config set k v ; redis-cli config rewrite   # на лету
# redis.conf: bind 127.0.0.1 + requirepass + maxmemory + maxmemory-policy + appendonly

См. также