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