Redis CLI: полезные команды для повседневной работы
Redis — это высокопроизводительная in-memory база данных, используемая для кэширования, хранения сессий, реализации очередей и других задач, требующих быстрого доступа к данным. Одним из ключевых инструментов взаимодействия с Redis является Redis CLI (Command Line Interface) — консольный клиент, позволяющий напрямую выполнять команды, управлять данными и диагностировать состояние сервера. Освоение основных и продвинутых команд CLI критически важно для разработчиков, DevOps-инженеров и SRE.
- Базовые команды Redis CLI: начало работы
- Управление ключами
- Работа с типами данных: строки, хеши, списки, множества
- Строки (Strings)
- Хеши (Hashes)
- Списки (Lists)
- Множества (Sets)
- Отсортированные множества (Sorted Sets)
- Инспекция и управление состоянием Redis
- INFO — детальная статистика
- DATABASES и KEYSPACE
- CONFIG — управление настройками
- CLIENT LIST и KILL
- Продвинутые функции CLI: мониторинг, скрипты, пайплайны
- MONITOR — живая лента команд
- DEBUG и MEMORY
- Выполнение Lua-скриптов
- Пайплайны и массовые операции
- Типичные ошибки и как их избежать
- Использование KEYS в production
- Игнорирование политики maxmemory
- Неправильное использование EXPIRE
- Отсутствие мониторинга
- Экспертное мнение
- Вопросы и ответы
- Заключение
Базовые команды Redis CLI: начало работы
Первый шаг в работе с Redis CLI — подключение к серверу. По умолчанию Redis запускается на localhost:6379. Подключиться можно через терминал командой:
redis-cli
Если Redis защищён паролем, используйте флаг -a:
redis-cli -a ваш_пароль
Для подключения к удалённому серверу укажите хост и порт:
redis-cli -h 192.168.1.100 -p 6380
После подключения вы попадаете в интерактивный режим, где можно выполнять команды. Простейшая команда — PING. Она проверяет доступность сервера:
> PING PONG
Если вы получили PONG, соединение установлено успешно. Команда QUIT завершает сессию.
Для выполнения одной команды без входа в интерактивный режим используйте:
redis-cli GET user:123
Команда HELP выводит справку. Например, HELP @generic покажет все общие команды, а HELP SET — подробную информацию по команде установки значения.
Управление ключами
Ключи — основа структуры данных в Redis. Команда SET создаёт или перезаписывает значение:
SET session:abc123 "user_id=456"
Чтобы получить значение, используйте GET:
GET session:abc123
Команда DEL удаляет ключ:
DEL cache:temp_data
Можно удалять несколько ключей за раз:
DEL key1 key2 key3
Для проверки существования ключа — EXISTS:
> EXISTS user:100 (integer) 1
Значение 1 означает, что ключ существует, 0 — нет.
Команда KEYS позволяет искать ключи по шаблону:
KEYS user:* # все ключи, начинающиеся с "user:"
Однако использование KEYS на продакшене нежелательно — она блокирует сервер при большом объёме данных. Лучше использовать SCAN.
Работа с типами данных: строки, хеши, списки, множества
Redis поддерживает несколько типов данных. Правильное использование каждого типа повышает эффективность и производительность.
Строки (Strings)
Строки — самый простой тип. Хранят строковые или бинарные данные до 512 МБ. Помимо SET и GET, полезны:
INCR— увеличивает числовое значение на 1;DECR— уменьшает на 1;INCRBY— увеличивает на указанное число;APPEND— добавляет строку к существующему значению.
Пример:
> SET counter 10 > INCR counter (integer) 11 > APPEND message "Hello" (integer) 5
Хеши (Hashes)
Хеши позволяют хранить объекты в виде полей и значений. Удобны для профилей пользователей, настроек и метаданных.
HSET user:100 name "Ivan" email "ivan@example.com"HGET user:100 name— получить одно поле;HGETALL user:100— получить все поля;HDEL user:100 email— удалить поле.
Пример:
> HSET product:789 title "Ноутбук" price 45000 > HGET product:789 price "45000"
Списки (Lists)
Списки — упорядоченные коллекции строк. Реализованы как двусвязные списки. Полезны для очередей, лент активности.
LPUSH mylist "first"— добавить в начало;RPUSH mylist "last"— добавить в конец;LPOP mylist— удалить и вернуть первый элемент;RPOP mylist— удалить и вернуть последний;LRANGE mylist 0 10— показать первые 10 элементов.
Пример использования как очереди:
> LPUSH queue "task1" > RPOP queue "task1"
Множества (Sets)
Множества хранят уникальные неупорядоченные элементы. Идеальны для тегов, друзей, уникальных посетителей.
SADD tags:post1 "tech" "news" "ai"SMEMBERS tags:post1— показать все элементы;SISMEMBER tags:post1 "ai"— проверить наличие;SREM tags:post1 "news"— удалить элемент.
Операции объединения и пересечения:
SUNION set1 set2— объединение;SINTER set1 set2— пересечение;SDIFF set1 set2— разница.
Отсортированные множества (Sorted Sets)
Sorted Sets — множества с весом (score). Элементы упорядочены по нему. Используются для рейтингов, лидербордов.
ZADD leaderboard 1000 "player1"ZRANK leaderboard "player1"— позиция игрока;ZREVRANGE leaderboard 0 9 WITHSCORES— топ-10 игроков с очками;ZINCRBY leaderboard 50 "player1"— увеличить счёт.
Пример:
> ZADD scores 85 "Alice" 92 "Bob" 78 "Charlie" > ZREVRANGE scores 0 2 1) "Bob" 2) "Alice" 3) "Charlie"
Инспекция и управление состоянием Redis
Для диагностики и мониторинга Redis предоставляет мощные команды.
INFO — детальная статистика
Команда INFO возвращает информацию о сервере, клиентских подключениях, памяти, постоянстве и т.д. Без параметров — всё сразу. Можно указать секцию:
INFO server— версия, ОС, время работы;INFO memory— использование памяти, пиковые значения;INFO stats— количество операций, hit/miss ratio;INFO keyspace— статистика по ключам (сколько ключей в каждом слоте).
Пример:
> INFO memory used_memory:1048576 used_memory_human:1.00M maxmemory:2097152 maxmemory_policy:volatile-lru
Анализ used_memory и maxmemory помогает предотвратить исчерпание памяти.
DATABASES и KEYSPACE
Redis поддерживает 16 баз данных по умолчанию (от 0 до 15). Переключение:
SELECT 1
Проверить, сколько ключей в каждой БД:
> INFO keyspace db0:keys=15,expires=3 db1:keys=8,expires=0
CONFIG — управление настройками
Позволяет просматривать и изменять конфигурацию без перезапуска.
CONFIG GET maxmemory— текущее ограничение памяти;CONFIG SET maxmemory 1gb— установить новое значение;CONFIG REWRITE— сохранить изменения в конфигурационном файле (если используется).
CLIENT LIST и KILL
CLIENT LIST показывает всех подключённых клиентов:
> CLIENT LIST id=5 addr=127.0.0.1:50432 fd=8 name= age=120 ...
Можно найти «зависшие» подключения. Для принудительного отключения:
CLIENT KILL 127.0.0.1:50432
Также можно фильтровать по ID:
CLIENT KILL ID 5
Продвинутые функции CLI: мониторинг, скрипты, пайплайны
Redis CLI предлагает инструменты для глубокого анализа и оптимизации.
MONITOR — живая лента команд
Команда MONITOR выводит все операции в реальном времени:
> MONITOR OK 1678886400.123456 [0 127.0.0.1:50430] "GET" "user:100" 1678886400.124567 [0 127.0.0.1:50431] "SET" "session:xyz" "..."
Полезно для отладки, но сильно нагружает сервер. Используйте кратко и только в тестовой среде.
DEBUG и MEMORY
Команды для анализа памяти и внутренней структуры:
MATCHING KEYS— показывает размер ключа в байтах:
MATCHING KEYS user:100
MEMORY USAGE user:100 — сколько памяти занимает ключ;MEMORY STATS — детальная статистика по использованию памяти;OBJECT encoding user:100 — способ кодирования значения (например, int, embstr).Знание кодирования помогает оптимизировать хранение.
Выполнение Lua-скриптов
Redis поддерживает выполнение Lua-скриптов через EVAL и EVALSHA. Это позволяет выполнять сложные операции атомарно.
Пример — увеличение счётчика, если он меньше 100:
EVAL "if redis.call('GET', KEYS[1]) < ARGV[1] then return redis.call('INCR', KEYS[1]) else return 0 end" 1 counter 100
Для повторного использования: сначала загрузите скрипт:
SCRIPT LOAD "return redis.call('PING')"
Он вернёт SHA1-хеш. Выполняйте по хешу:
EVALSHA abc123def... 0
Пайплайны и массовые операции
Пайплайнирование позволяет отправить несколько команд за один сетевой запрос, снижая задержку.
В CLI пайплайн можно смоделировать через stdin:
echo -e "PINGnPINGnPING" | redis-cli --pipe
Или использовать в скриптах:
printf "SET k1 v1nSET k2 v2n" | redis-cli --pipe
Команда --pipe также проверяет целостность данных.
Типичные ошибки и как их избежать
Даже опытные специалисты допускают ошибки при работе с Redis CLI.
Использование KEYS в production
Как уже упоминалось, KEYS * блокирует сервер при большом количестве ключей. Вместо этого используйте SCAN:
> SCAN 0 MATCH user:* COUNT 100 1) "456" 2) 1) "user:100" 2) "user:101"
SCAN работает итеративно и не блокирует сервер.
Игнорирование политики maxmemory
Если maxmemory достигнут, Redis начинает удалять ключи. Политика задаётся через maxmemory-policy. Распространённые значения:
Политика |
Описание |
|---|---|
noeviction |
Возвращает ошибку при превышении памяти |
allkeys-lru |
Удаляет наименее недавно использованные ключи |
volatile-lru |
То же, но только для ключей с TTL |
allkeys-random |
Случайное удаление любых ключей |
Выбор политики зависит от сценария. Для кэша подходит allkeys-lru, для сессий — volatile-lru.
Неправильное использование EXPIRE
Команда EXPIRE key seconds устанавливает время жизни ключа. Ошибки:
- Установка TTL на ключ, который не существует — команда вернёт 0, но ошибки не будет;
- Обновление TTL каждый раз при обращении — может замедлить работу;
- Забыть, что
PERSISTудаляет TTL.
Лучше устанавливать TTL при создании:
SETEX session:abc 3600 "data"
Отсутствие мониторинга
Не проверяя INFO memory и INFO stats, можно пропустить рост потребления памяти или падение hit ratio. Регулярно анализируйте:
- Соотношение
keyspace_hits/keyspace_misses— чем выше hit ratio, тем эффективнее кэш; - Рост
used_memory— возможна утечка ключей; - Количество подключений — резкий рост может указывать на проблему в приложении.
Экспертное мнение
При работе с Redis CLI следует придерживаться ряда принципов. Во-первых, всегда используйте осмысленные префиксы для ключей — это упрощает чтение, отладку и масштабирование. Во-вторых, избегайте выполнения медленных команд в рабочее время. Команды вроде KEYS, HGETALL на больших хешах или SMEMBERS могут вызвать задержки. Вместо них применяйте итеративные аналоги: SCAN, HSCAN, SSCAN.
Автоматизация — ключ к надёжности. Скрипты на Bash, Python или Go, использующие redis-cli, позволяют регулярно выполнять резервное копирование, очистку устаревших данных или проверку состояния. Также рекомендуется включать AOF (Append Only File) для защиты от потери данных.
Помните: Redis — однопоточный. Даже одна тяжёлая команда может заблокировать сервер на доли секунды. Тестируйте новые команды в staging-среде. Используйте --latency или --intrinsic-latency в CLI для оценки производительности системы.
Вопросы и ответы
INFO server и найдите поле uptime_in_seconds. Оно показывает, сколько секунд сервер работает с момента последнего запуска.redis-cli: redis-cli GET config:theme. Это удобно для скриптов и автоматизации.FLUSHDB для очистки текущей БД или FLUSHALL — для всех. Будьте осторожны: эти команды необратимы. Перед выполнением убедитесь, что резервная копия создана.redis-server), открыт ли порт, правильные ли хост и порт в команде, нет ли фаервола. Также убедитесь, что в конфиге не стоит bind только на 127.0.0.1, если подключение внешнее.INFO commandstats. Он показывает счётчики вызовов для каждой команды. После анализа можно сбросить статистику: CONFIG RESETSTAT.Заключение
Redis CLI — это мощный и гибкий инструмент, необходимый для эффективной работы с Redis. От базовых операций вроде SET и GET до продвинутых функций вроде MONITOR, SCAN и выполнения Lua-скриптов — владение этими командами позволяет не только управлять данными, но и диагностировать проблемы, оптимизировать производительность и обеспечивать стабильность системы.
- Используйте
INFOиCONFIGдля диагностики и настройки без перезапуска. - Заменяйте
KEYSнаSCANв production-средах. - Применяйте осмысленные префиксы ключей и контролируйте использование памяти.
- Тестируйте тяжёлые команды в staging, помня об однопоточной природе Redis.
- Автоматизируйте рутинные операции через скрипты с использованием
redis-cli.
⚠️ Дисклеймер — нажмите, чтобы развернуть
Материалы, опубликованные в разделе «Блог» на сайте RU DESIGN SHOP (rudesignshop.ru), носят исключительно информационный и ознакомительный характер и не являются руководством к действию, финансовой рекомендацией, медицинской услугой, ветеринарным назначением либо рекламой товаров и услуг, включая азартные игры. Публикации не содержат призывов к участию в азартных играх и не направлены на продвижение соответствующих операторов.
Безопасность применения товаров и веществ: при использовании строительных материалов, бытовой химии, пестицидов и агрохимикатов необходимо строго следовать инструкциям производителя и действующему законодательству Российской Федерации, включая Федеральный закон РФ от 19.07.1997 № 109-ФЗ «О безопасном обращении с пестицидами и агрохимикатами».
Упоминание товарных знаков, брендов и организаций носит исключительно информационный характер и не означает наличие партнёрских отношений или одобрения со стороны правообладателей.
Материалы, содержащие сведения о медицинских, ветеринарных или косметических средствах, представлены в справочных целях и не являются медицинской консультацией или назначением. Перед применением рекомендуется обратиться к врачу, ветеринарному специалисту или иному сертифицированному профессионалу.
Возрастные ограничения: материалы, содержащие сведения о продукции категории 18+, включая алкоголь или азартные игры, предназначены исключительно для совершеннолетней аудитории и публикуются в информационных целях.
Правовая ответственность: решения, принятые на основе опубликованной информации, пользователь принимает самостоятельно и на свой риск; редакция и авторы несут ответственность в пределах, установленных законодательством Российской Федерации.
Редакция не допускает публикаций, содержащих пропаганду экстремизма, терроризма, наркотических средств или суицида; подобные материалы подлежат немедленному удалению.
Упоминание организаций с ограниченным статусом: компания Meta Platforms Inc. (социальные сети Facebook и Instagram) признана экстремистской организацией решением суда РФ, её деятельность запрещена на территории Российской Федерации; любые упоминания приводятся исключительно в информационных целях.
Авторские права и источники: информация собирается из открытых источников; её актуальность указывается на дату публикации и может изменяться.
Изображения и иллюстрации используются на условиях, разрешённых правообладателями. При возникновении претензий редакция готова оперативно рассмотреть обращение и внести необходимые изменения.
Персональные данные и cookies: сайт использует cookies и обрабатывает персональные данные пользователей в соответствии с Федеральным законом № 152-ФЗ «О персональных данных» и Политикой конфиденциальности RU DESIGN SHOP.
Мнения авторов могут не совпадать с позицией государственных органов или коммерческих организаций, упомянутых в материалах.