КОМАНДА
COMMAND
COMMAND
- Доступно с версии:
- 2.8.13
- Сложность по времени:
- O(N), где N — общее количество команд Redis
- Категории ACL:
-
@slow,@connection,
Возвращает массив с подробностями о каждой команде Redis.
Команда COMMAND является рефлексивной. Её ответ описывает все команды, которые может обработать сервер. Клиенты Redis могут вызвать её, чтобы получить рабочие возможности сервера во время рукопожатия.
COMMAND также имеет несколько подкоманд. Обратитесь к её подкомандам для получения дополнительной информации.
Примечание для кластеров: эта команда особенно полезна для клиентов, осознающих кластер. Таким клиентам необходимо идентифицировать имена ключей в командах, чтобы маршрутизировать запросы к правильному фрагменту. Хотя большинство команд принимают один ключ в качестве первого аргумента, есть много исключений из этого правила. Вы можете вызвать COMMAND и затем сохранить сопоставление между командами и соответствующими правилами спецификации ключей в кэше клиента.
Возвращаемый ответ — это массив с элементом на команду. Каждый элемент, описывающий команду Redis, представлен в виде массива.
Массив команды состоит из фиксированного числа элементов. Точное количество элементов в массиве зависит от версии сервера.
- Имя
- Арность
- Флаги
- Первый ключ
- Последний ключ
- Шаг
- Категории ACL (от Redis 6.0)
- Рекомендации (от Redis 7.0)
- Спецификации ключей (от Redis 7.0)
- Подкоманды (от Redis 7.0)
Имя
Это имя команды в нижнем регистре.
Примечание: Имена команд Redis не чувствительны к регистру.
Арность
Арность — это количество аргументов, ожидаемых командой. Она следует простому шаблону:
- Положительное целое число означает фиксированное количество аргументов.
- Отрицательное целое число означает минимальное количество аргументов.
Арность команды всегда включает само имя команды (и подкоманду, если применимо).
Примеры:
-
GETимеет арность 2, так как команда принимает только один аргумент и всегда имеет форматGET _key_. -
MGETимеет арность -2, так как команда принимает как минимум один аргумент, но возможно несколько:MGET _key1_ [key2] [key3] ....
Флаги
Флаги команды — это массив. Он может содержать следующие простые строки (ответ состояния):
- admin: команда является административной командой.
- asking: команда разрешена даже во время миграции хеш-слотов. Этот флаг актуален в развертываниях Redis Cluster.
- blocking: команда может заблокировать запрашивающего клиента.
- denyoom: команда отклоняется, если использование памяти сервером слишком велико (см. директиву конфигурации maxmemory).
-
fast: команда работает за постоянное или логарифмическое время. Этот флаг используется для мониторинга задержки с помощью команды
LATENCY. - loading: команда разрешена во время загрузки базы данных.
-
movablekeys: значения первого ключа, последнего ключа и шага не определяют все позиции ключей. В этом случае клиентам необходимо использовать
COMMAND GETKEYSили спецификации ключей. Более подробная информация приведена ниже. - no_auth: для выполнения команды не требуется аутентификация.
-
no_async_loading: команда отклоняется во время асинхронной загрузки (то есть, когда реплика использует дискобезопасные
SWAPDB SYNC, и разрешает доступ к старому набору данных). - no_mandatory_keys: команда может принимать аргументы имени ключа, но они не являются обязательными.
- no_multi: команда не разрешена в контексте транзакции .
- noscript: команда не может вызываться из скриптов или функций .
- pubsub: команда относится к Redis Pub/Sub.
- random: команда возвращает случайные результаты, что является проблемой с точной репликацией скриптов. Начиная с Redis 7.0, этот флаг является рекомендацией команды.
- readonly: команда не изменяет данные.
- sort_for_script: вывод команды сортируется при вызове из скрипта.
-
skip_monitor: команда не отображается в выводе
MONITOR. -
skip_slowlog: команда не отображается в выводе
SLOWLOG. Начиная с Redis 7.0, этот флаг является рекомендацией команды. - stale: команда разрешена, когда у реплики есть устаревшие данные.
- write: команда может изменять данные.
Movablekeys
Рассмотрим SORT:
1) 1) "sort"
2) (integer) -2
3) 1) write
2) denyoom
3) movablekeys
4) (integer) 1
5) (integer) 1
6) (integer) 1
...
Некоторые команды Redis не имеют предопределенных местоположений ключей или их трудно найти. Для этих команд флаг movablekeys указывает, что значений первого ключа, последнего ключа и шага недостаточно для поиска всех ключей.
Вот несколько примеров команд, у которых установлен флаг movablekeys:
-
SORT: необязательные модификаторы STORE, BY и GET следуют за именами ключей. -
ZUNION: аргумент numkeys указывает количество аргументов имени ключа. -
MIGRATE: ключи появляются в ключевом слове KEYS и только когда второй аргумент — пустая строка.
Клиенты Redis Cluster должны использовать другие меры для поиска ключей для таких команд.
Вы можете использовать команду COMMAND GETKEYS, чтобы ваш сервер Redis сообщил все ключи для данного вызова команды.
Начиная с Redis 7.0, клиенты могут использовать спецификации ключей для определения позиций имён ключей. Единственными командами, требующими использования COMMAND GETKEYS, являются SORT и MIGRATE для клиентов, которые анализируют спецификации ключей.
Для получения дополнительной информации, пожалуйста, обратитесь к странице спецификаций ключей.
Первый ключ
Позиция первого аргумента имени ключа команды. Для большинства команд позиция первого ключа — 1. Позиция 0 всегда относится к имени самой команды.
Последний ключ
Позиция последнего аргумента имени ключа команды. Команды Redis обычно принимают один, два или несколько ключей.
Команды, принимающие один ключ, имеют как первый ключ, так и последний ключ, установленные в 1.
Команды, принимающие два аргумента имени ключа, например, BRPOPLPUSH, SMOVE и RENAME, имеют это значение, установленное на позицию их второго ключа.
Многоключевые команды, принимающие произвольное количество ключей, например, MSET, используют значение -1.
Шаг
Шаг, или приращение, между первым ключом и позицией следующего ключа.
Рассмотрим следующие два примера:
1) 1) "mset"
2) (integer) -3
3) 1) write
2) denyoom
4) (integer) 1
5) (integer) -1
6) (integer) 2
...
1) 1) "mget"
2) (integer) -2
3) 1) readonly
2) fast
4) (integer) 1
5) (integer) -1
6) (integer) 1
...
Счётчик шагов позволяет нам найти позиции ключей. Например, MSET: её синтаксис MSET _key1_ _val1_ [key2] [val2] [key3] [val3]..., поэтому ключи находятся на каждой второй позиции (значение шага 2). В отличие от MGET, которая использует значение шага 1.
Категории ACL
Это массив простых строк, представляющих категории ACL, к которым относится команда. Для получения дополнительной информации см. страницу списка управления доступом.
Рекомендации по командам
Полезная информация о команде. Для использования клиентами/прокси.
Для получения дополнительной информации см. страницу рекомендаций по командам.
Спецификации ключей
Это массив, содержащий спецификации ключей команды. Каждый элемент массива — это карта, описывающая метод поиска ключей в аргументах команды.
Для получения дополнительной информации, пожалуйста, обратитесь к странице спецификаций ключей.
Подкоманды
Это массив, содержащий все подкоманды команды, если таковые имеются. Некоторые команды Redis имеют подкоманды (например, подкоманда REWRITE команды CONFIG). Каждый элемент массива представляет одну подкоманду и соответствует тем же спецификациям, что и ответ COMMAND.
Возврат
Массивно-ответный тип: вложенный список деталей команды.
Порядок команд в массиве случайный.
Примеры
Следующее — вывод COMMAND для команды GET:
1) 1) "get"
2) (integer) 2
3) 1) readonly
2) fast
4) (integer) 1
5) (integer) 1
6) (integer) 1
7) 1) @read
2) @string
3) @fast
8) (empty array)
9) 1) 1) "flags"
2) 1) read
3) "begin_search"
4) 1) "type"
2) "index"
3) "spec"
4) 1) "index"
2) (integer) 1
5) "find_keys"
6) 1) "type"
2) "range"
3) "spec"
4) 1) "lastkey"
2) (integer) 0
3) "keystep"
4) (integer) 1
5) "limit"
6) (integer) 0
10) (empty array)
...
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/command/