COMMAND

返回所有命令的详细信息。

语法

COMMAND

引入版本:2.8.13

复杂度摘要:O(N)

返回一个数组,其中包含每个 Redis 命令的详细信息。

The COMMAND command is introspective.它的回复描述了服务器可以处理的所有命令。 Redis客户端可以在握手过程中调用它来获取服务器的运行时能力。

COMMAND 还有几个子命令。请参阅其子命令以获取更多详细信息。

集群注意事项: 该命令对于支持集群的客户端特别有用。此类客户端必须识别命令中的键名称,以将请求路由到正确的分片。尽管大多数命令接受单个键作为其第一个参数,但此规则有许多例外。您可以调用COMMAND,然后将命令之间的映射及其各自的关键规范规则缓存在客户端中。

它返回的回复是一个数组,每个命令都有一个元素。描述 Redis 命令的每个元素本身都表示为一个数组。

该命令的数组由固定数量的元素组成。数组中元素的确切数量取决于服务器的版本。

  1. 姓名
  2. 数量
  3. 旗帜
  4. 第一把钥匙
  5. 最后一个键
  6. 步骤
  7. ACL类别(从 Redis 6.0 开始)
  8. 提示(从 Redis 7.0 开始)
  9. 主要规格(从 Redis 7.0 开始)
  10. 子命令(从 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命令没有预定的关键位置或者不容易找到。对于这些命令,可移动键 标志指示 第一把钥匙、最后一个键 和 步骤 值不足以查找所有键。

以下是具有 可移动键 标志的命令的几个示例:

  • SORT:可选的 STORE、BY 和 GET 修饰符后跟键名称。
  • ZUNION:数字键 参数指定数字键名称参数。
  • 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 不同,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 文档许可。