获取 Redis 命令详情数组
语法
COMMAND
可用版本:
2.8.13
时间复杂度:
O(N) 其中 N 是 Redis 命令的总数
ACL 类别:
@slow
, @connection
返回一个包含每个 Redis 命令详细信息的数组。
该COMMAND
命令是内省的。它的回复描述了服务器可以处理的所有命令。Redis 客户端可以在握手期间调用它来获取服务器的运行时能力。
COMMAND
还有几个子命令。有关详细信息,请参阅其子命令。
集群注意事项: 此命令对于支持集群的客户端特别有用。此类客户端必须识别命令中的键名,才能将请求路由到正确的分片。尽管大多数命令都接受一个键作为它们的第一个参数,但这条规则有很多例外。您可以调用COMMAND
并将命令之间的映射与其各自的密钥规范规则缓存在客户端中。
它返回的回复是一个数组,每个命令都有一个元素。描述 Redis 命令的每个元素本身都表示为一个数组。
该命令的数组由固定数量的元素组成。数组中元素的确切数量取决于服务器的版本。
Name
Arity
Flags
First key
Last key
Step
ACL 类别(从 Redis 6.0 开始)
提示(从 Redis 7.0 开始)
关键规范(从 Redis 7.0 开始)
子命令(从 Redis 7.0 开始)
姓名
这是小写的命令名称。
注意: Redis 命令名称不区分大小写。
阿里蒂
Arity 是命令期望的参数数量。它遵循一个简单的模式:
正整数表示固定数量的参数。
负整数表示最少数量的参数。
命令 arity始终包括命令的名称本身(以及适用时的子命令)。
例子:
标志
命令标志是一个数组。它可以包含以下简单字符串(状态回复):
**admin:**该命令是一个管理命令。
**问:**即使在哈希槽迁移期间也允许该命令。此标志与 Redis 集群部署相关。
**阻塞:**该命令可能会阻塞请求的客户端。
denyoom:如果服务器的内存使用率太高,该命令将被拒绝(请参阅maxmemory配置指令)。
**快速:**命令以恒定或 log(N) 时间运行。此标志用于使用LATENCY
命令监视延迟。
**loading:**在加载数据库时允许该命令。
**可移动键:**第一个键、最后一个键和步长值并不能确定所有键的位置。在这种情况下,客户需要使用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:**该命令可以修改数据。
可动keys
考虑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标志表示first key、last key和step值不足以找到所有键。
以下是几个具有可移动键标志的命令示例:
SORT
: 可选的STORE、BY和GET修饰符后跟键名。
ZUNION
: numkeys参数指定数字键名参数。
MIGRATE
: 键出现KEYS关键字且仅当第二个参数为空字符串时。
Redis 集群客户端需要使用以下其他措施来定位此类命令的键。
您可以使用该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)
...