命令
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 命令名称不区分大小写。
阿尔蒂
Arity 是命令所需的参数数。 它遵循一个简单的模式:
- 正整数表示固定数量的参数。
- 负整数表示参数的最小数量。
命令 arity 始终包括命令的名称本身(以及子命令,如果适用)。
例子:
GET
的 arity 为 2,因为该命令只接受一个参数,并且始终具有GET _key_
.MGET
的 arity 为 -2,因为该命令至少接受一个参数,但可能接受多个参数:MGET _key1_ [key2] [key3] ...
.
标志
命令标志是一个数组。它可以包含以下简单字符串 (status reply):
- admin:该命令是一个管理命令。
- asking:即使在 hash slot 迁移期间也允许该命令。 此标志与 Redis 集群部署相关。
- blocking:该命令可能会阻止请求客户端。
- Denyoom:如果服务器的内存使用率过高,则拒绝该命令(请参阅 maxMemory 配置指令)。
- fast:该命令以 constant 或 log(N) 时间运行。
此标志用于监控延迟,并使用
LATENCY
命令。 - loading:在数据库加载过程中允许使用该命令。
- movablekeys:First Key、Last Key 和 Step 值并不能确定所有键位置。
客户端需要使用
COMMAND GETKEYS
或关键规格。 有关更多详细信息,请参阅下文。 - no_auth:执行命令不需要身份验证。
- no_async_loading:在异步加载期间(即副本使用 disk-less 时)该命令被拒绝
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 标志指示第一个键、最后一个键和 step 值不足以找到所有键。
以下是具有 movablekeys 标志的几个命令示例:
SORT
:可选的 STORE、BY 和 GET 修饰符后跟键的名称。ZUNION
:numkeys 参数指定数字键名称参数。MIGRATE
:键出现 KEYS 关键字,并且仅当第二个参数为空字符串时。
Redis Cluster 客户端需要使用其他措施(如下所示)来查找此类命令的键。
您可以使用COMMAND GETKEYS
命令,并让您的 Redis 服务器报告给定命令调用的所有键。
从 Redis 7.0 开始,客户端可以使用 key 规范来识别 key 名称的位置。
唯一需要使用COMMAND GETKEYS
是SORT
和MIGRATE
适用于解析键规范的客户端。
有关更多信息,请参阅关键规格页面。
第一个密钥
命令的第一个 key name 参数的位置。 对于大多数命令,第一个键的位置是 1。 位置 0 始终是命令名称本身。
最后一个键
命令的最后一个键名称参数的位置。 Redis 命令通常接受一个、两个或多个键。
接受单个键的命令将第一个键和最后一个键都设置为 1。
接受两个 key name 参数的命令,例如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 类别。 有关更多信息,请参阅访问控制列表页面。
命令提示
有关命令的有用信息。 供客户端/代理使用。
请查看 命令提示 页面以了解更多信息。
主要规格
这是一个由命令的关键规范组成的数组。 数组中的每个元素都是一个 map,描述在命令参数中查找键的方法。
有关更多信息,请查看主要规格页面。
子命令
这是一个包含命令的所有子命令(如果有)的数组。
一些 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)
...