命令
COMMAND
- Available since:
- 2.8.13
- Time complexity:
- O(N) where N is the total number of Redis commands
- ACL categories:
-
@slow,@connection,
返回一个包含每个Redis命令详细信息的数组。
COMMAND 命令是自省的。
它的回复描述了服务器可以处理的所有命令。
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] ...。
标志
命令标志是一个数组。它可以包含以下简单的字符串(状态回复):
- admin: 该命令是一个管理命令。
- asking: 即使在哈希槽迁移期间也允许该命令。 此标志在Redis集群部署中相关。
- blocking: 该命令可能会阻塞请求的客户端。
- denyoom: 如果服务器的内存使用率过高,命令将被拒绝(请参阅maxmemory配置指令)。
- 快速: 该命令在常数或对数(N)时间内操作。
此标志用于通过
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: 该命令可能会修改数据。
可移动键
考虑 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 集群客户端需要使用其他措施,如下所示,来定位这些命令的键。
你可以使用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命令有子命令(例如,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)
...