COMMAND
返回所有命令的详细信息。
语法
COMMAND
引入版本:2.8.13
复杂度摘要:O(N)
返回一个数组,其中包含每个 Redis 命令的详细信息。
The COMMAND command is introspective.它的回复描述了服务器可以处理的所有命令。 Redis客户端可以在握手过程中调用它来获取服务器的运行时能力。
COMMAND 还有几个子命令。请参阅其子命令以获取更多详细信息。
集群注意事项: 该命令对于支持集群的客户端特别有用。此类客户端必须识别命令中的键名称,以将请求路由到正确的分片。尽管大多数命令接受单个键作为其第一个参数,但此规则有许多例外。您可以调用COMMAND,然后将命令之间的映射及其各自的关键规范规则缓存在客户端中。
它返回的回复是一个数组,每个命令都有一个元素。描述 Redis 命令的每个元素本身都表示为一个数组。
该命令的数组由固定数量的元素组成。数组中元素的确切数量取决于服务器的版本。
- 姓名
- 数量
- 旗帜
- 第一把钥匙
- 最后一个键
- 步骤
- ACL类别(从 Redis 6.0 开始)
- 提示(从 Redis 7.0 开始)
- 主要规格(从 Redis 7.0 开始)
- 子命令(从 Redis 7.0 开始)
姓名
这是小写的命令名称。
注意: Redis 命令名称不区分大小写。
数量
Arity 是命令期望的参数数量。它遵循一个简单的模式:
- 正整数表示参数的数量固定。
- 负整数表示参数数量最少。
命令数量 总是包括 命令本身的名称(以及适用时的子命令)。
例子:
GET的元数为 2,因为该命令仅接受一个参数并且始终具有GET _key_格式。MGET的元数为 -2,因为该命令至少接受一个参数,但也可能接受多个参数:MGET _key1_ [key2] [key3] ...。
旗帜
命令标志是一个数组。它可以包含以下简单字符串(状态回复):
- 管理员: 该命令是管理命令。
- 询问: 即使在哈希槽迁移期间也允许该命令。该标志与 Redis 集群部署相关。
- 封锁: 该命令可能会阻止请求客户端。
- 否认:如果服务器的内存使用率过高,则该命令将被拒绝(请参阅 最大内存 配置指令)。
- 快: 该命令以常数或 log(N) 时间运行。该标志用于通过
LATENCY命令监视延迟。 - 加载: 在数据库加载时允许使用该命令。
- 可移动键:、第一把钥匙、最后一个键 和 步骤 值并不决定所有关键位置。在这种情况下,客户端需要使用
COMMAND GETKEYS或 主要规格。请参阅下文了解更多详情。 - no_auth: 执行命令不需要认证。
- no_async_loading: 该命令在异步加载期间被拒绝(即当副本使用无磁盘
SWAPDB SYNC并允许访问旧数据集时)。 - no_mandatory_keys: 该命令可以接受键名称参数,但这些不是强制性的。
- no_multi: 该命令不允许出现在 交易 的上下文中。
- 无脚本: 该命令不能从脚本 或功能 调用。
- 发布订阅: 该命令与Redis 发布/订阅 相关。
- 随机:该命令返回随机结果,这是逐字脚本复制的一个问题。从 Redis 7.0 开始,该标志是 命令提示。
- 只读: 命令不修改数据。
- 脚本排序: 当从脚本调用时,命令的输出被排序。
- 跳过监视器: 命令不会显示在
MONITOR的输出中。 - skip_slowlog: 该命令未显示在
SLOWLOG的输出中。从 Redis 7.0 开始,该标志是 命令提示。 - 陈旧: 当副本具有陈旧数据时允许该命令。
- 写: 命令可能会修改数据。
可移动按键
考虑SORT:
1) 1) "sort"
2) (integer) -2
3) 1) write
2) denyoom
3) movablekeys
4) (integer) 1
5) (integer) 1
6) (integer) 1
...
一些Redis命令没有预定的关键位置或者不容易找到。对于这些命令,可移动键 标志指示 第一把钥匙、最后一个键 和 步骤 值不足以查找所有键。
以下是具有 可移动键 标志的命令的几个示例:
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 不同,MGET 使用 1 的步长值。
ACL类别
这是一个简单字符串数组,它们是命令所属的 ACL 类别。请参阅 访问控制列表 页面了解更多信息。
命令提示
有关命令的有用信息。供客户端/代理使用。
请查看命令提示页面以获取更多信息。
主要规格
这是一个由命令的关键规范组成的数组。数组中的每个元素都是一个映射,描述在命令参数中定位键的方法。
更多信息请查看主要规格页面。
子命令
这是一个包含该命令的所有子命令(如果有)的数组。某些 Redis 命令具有子命令(例如 CONFIG 的 REWRITE 子命令)。数组中的每个元素代表一个子命令,并遵循与 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)
...
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ✅ 标准 |
✅ 标准 |
返回值
RESP2
数组回复:命令详细信息的嵌套列表。数组中命令的顺序是随机的。
RESP3
数组回复:命令详细信息的嵌套列表。数组中命令的顺序是随机的。
资料来源:Redis 官方 COMMAND 文档;中文内容参考 Redis 文档许可。