← Весь справочник

redis-cli

Клиент Redis — команды для строк, списков, хешей и множеств, TTL, поиск ключей через SCAN, INFO и CONFIG

redis-cli отправляет команды серверу Redis — хранилищу «ключ → значение» в памяти. Команду можно передать аргументами (ответ печатается и клиент выходит) или работать в интерактивной консоли.

Синтаксис

redis-cli [-h хост] [-p порт] [-n номер_базы] [КОМАНДА аргументы…]

По умолчанию клиент идёт на 127.0.0.1:6379 в базу 0. Имена команд регистронезависимы: GET и get — одно и то же; имена ключей — нет. Справка по команде прямо в консоли: HELP SET.

Опции клиента

ОпцияЧто делает
-h хост, -p портадрес сервера
-u redis://[:пароль@]хост:порт/базавсё подключение одной строкой
-a парольпароль (лучше через переменную REDISCLI_AUTH — не попадёт в историю и ps)
--user имя --pass парольвход по ACL-пользователю
-n 2работать с базой номер 2 (по умолчанию их 16: 0–15)
--raw / --no-rawвывод без кавычек и типов / с ними, независимо от того, терминал это или пайп
-eвернуть код 1, если команда закончилась ошибкой
-xвзять последний аргумент команды из stdin
-r N / -i секповторить команду N раз / с паузой между повторами
--scan --pattern 'шаблон'перечислить ключи через SCAN, без ручной работы с курсором
--bigkeysнайти самые крупные ключи каждого типа
--statживая статистика: ключи, память, клиенты, запросы

Команды

Ключи (любого типа)

КомандаЧто делает
EXISTS ключ…сколько из перечисленных ключей существует
DEL ключ… / UNLINK ключ…удалить (UNLINK освобождает память в фоне)
TYPE ключтип: string, list, hash, set, zset, stream; none — ключа нет
RENAME старый новыйпереименовать
EXPIRE ключ сек / PEXPIRE ключ мсвремя жизни
EXPIREAT ключ unix_timeудалить в заданный момент
TTL ключ / PTTL ключостаток в секундах / мс: -1 — без срока, -2 — ключа нет
PERSIST ключснять время жизни
KEYS шаблонвсе ключи по шаблону (*, ?, [ab]) — за один проход
SCAN курсор [MATCH шаблон] [COUNT n] [TYPE тип]обход ключей порциями

Строки и счётчики

КомандаЧто делает
SET ключ значениезаписать; EX сек / PX мс — со сроком, NX — только если ключа нет, XX — только если есть, KEEPTTL — сохранить прежний срок
GET ключ / GETDEL ключпрочитать / прочитать и удалить
MSET k1 v1 k2 v2 / MGET k1 k2несколько ключей за раз
INCR / DECR / INCRBY ключ nатомарно изменить число
APPEND ключ текст / STRLEN ключдописать в конец / длина строки

Списки

КомандаЧто делает
LPUSH / RPUSH ключ элем…добавить в начало / в конец
LPOP / RPOP ключзабрать из начала / с конца
LRANGE ключ 0 -1элементы с позиции по позицию (-1 — последний)
LLEN ключ / LINDEX ключ iдлина / элемент по индексу
LREM ключ 0 элемудалить все вхождения элемента

Хеши (объект с полями)

КомандаЧто делает
HSET ключ поле знач [поле знач…]записать поля
HGET ключ поле / HGETALL ключодно поле / все поля и значения
HKEYS / HVALS / HLEN ключимена полей / значения / число полей
HEXISTS ключ поле / HDEL ключ полеесть ли поле / удалить поле
HINCRBY ключ поле nизменить числовое поле

Множества и упорядоченные множества

КомандаЧто делает
SADD / SREM ключ элем…добавить / удалить элементы множества
SMEMBERS / SCARD ключвсе элементы (порядок не гарантирован) / их число
SISMEMBER ключ элемвходит ли элемент
SINTER / SUNION / SDIFF k1 k2пересечение / объединение / разность
ZADD ключ балл элем…добавить в упорядоченное множество с баллом
ZRANGE ключ 0 -1 [WITHSCORES] [REV]по возрастанию балла (REV — по убыванию)
ZRANGEBYSCORE ключ min maxэлементы с баллом в диапазоне
ZSCORE / ZRANK ключ элембалл / позиция элемента
ZINCRBY ключ n элем / ZREM ключ элемизменить балл / удалить

Сервер

КомандаЧто делает
PINGпроверка связи — ответ PONG
SELECT nперейти в базу n (в интерактивной консоли)
DBSIZEчисло ключей в текущей базе
INFO [раздел]статистика: server, memory, clients, persistence, replication, keyspace
CONFIG GET параметрпрочитать настройку (* — все)
CONFIG SET параметр значениеизменить на лету
CONFIG REWRITEзаписать текущие настройки в конфиг-файл
SAVE / BGSAVE / LASTSAVEснимок на диск: синхронно / в фоне / время последнего
CLIENT LISTподключённые клиенты
MONITORпоказывать все команды, приходящие на сервер (отладка)
FLUSHDB / FLUSHALLудалить все ключи текущей базы / всех баз

Примеры

# сервер жив?
redis-cli PING

# записать и прочитать
redis-cli SET greeting hello
redis-cli GET greeting

# запись со сроком жизни 30 секунд и проверка остатка
redis-cli SET token abc EX 30
redis-cli TTL token

# записать, только если ключа ещё нет (простая блокировка)
redis-cli SET lock:job 1 NX EX 60

# срок жизни для уже существующего ключа
redis-cli EXPIRE greeting 3600

# объект в виде хеша
redis-cli HSET user:1 name ann role admin
redis-cli HGETALL user:1

# очередь на списке
redis-cli RPUSH jobs a b c
redis-cli LPOP jobs
redis-cli LRANGE jobs 0 -1

# безопасно перечислить ключи по шаблону
redis-cli --scan --pattern 'session:*'

# сколько ключей в каждой базе и сколько памяти занято
redis-cli INFO keyspace
redis-cli INFO memory | grep used_memory_human

# текущее значение настройки
redis-cli CONFIG GET maxmemory

# та же работа, но в базе 1
redis-cli -n 1 SET flag on
redis-cli -n 1 DBSIZE

# в скрипте: упасть, если команда вернула ошибку
redis-cli -e GET greeting || echo 'ошибка Redis'

# значение из файла
redis-cli -x SET config < settings.json

Подводные камни

  • KEYS * блокирует сервер, пока не обойдёт все ключи. На большой базе это пауза для всех клиентов. Вне учебных стендов перечисляй ключи через SCAN или --scan.
  • SCAN возвращает курсор и порцию ключей. Обход закончен, только когда курсор снова стал 0. Одна порция — не весь список, а ключи в ней могут повторяться.
  • SET сбрасывает время жизни. Перезапись ключа обычным SET делает TTL равным -1. Нужен прежний срок — добавь KEEPTTL или задай его заново.
  • Базы изолированы. Ключ, записанный с -n 2, не виден в базе 0, а KEYS/DBSIZE считают только текущую базу.
  • Ошибка не меняет код возврата. На WRONGTYPE, NOAUTH или неизвестную команду redis-cli печатает сообщение, но завершается с кодом 0. В скриптах добавляй -e или проверяй сам ответ.
  • Команда не того типа даёт WRONGTYPE. GET по ключу-списку не сработает: сначала узнай тип через TYPE.
  • CONFIG SET живёт до перезапуска. Чтобы сохранить настройку, правь конфиг-файл или выполни CONFIG REWRITE (работает, только если сервер запущен с файлом конфигурации).
  • Вывод в терминал и в пайп различается. В терминале видно (nil) и (integer) 1, в пайпе — голые значения. Не завязывай скрипты на «красивый» вид.
  • -x берёт stdin целиком, вместе с последним переводом строки. echo hello | redis-cli -x SET k запишет hello\n.
  • FLUSHALL без подтверждения удаляет данные всех баз сразу.

См. также

psql · sqlite3 · service · exit-codes