COMMAND

语法
COMMAND
可用版本
Redis 开源版 2.8.13
时间复杂度
O(N),其中 N 是 Redis 命令总数
ACL 类别
@slow, @connection,

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

COMMAND 命令是内省的。其回复描述了服务器可以处理的所有命令。Redis 客户端可以在握手期间调用它来获取服务器的运行时能力。

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

集群说明:此命令对于具备集群感知能力的客户端特别有用。此类客户端必须识别命令中的键名,以便将请求路由到正确的分片。尽管大多数命令将其第一个参数作为单个键接受,但此规则存在许多例外。您可以调用 COMMAND 命令,然后在客户端中缓存命令与其各自的键规范规则之间的映射。

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

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

  1. 名称
  2. Arity(参数数量)
  3. 标志
  4. 第一个键
  5. 最后一个键
  6. 步长
  7. ACL 类别(Redis 6.0 及更高版本)
  8. 提示(Redis 7.0 及更高版本)
  9. 键规范(Redis 7.0 及更高版本)
  10. 子命令(Redis 7.0 及更高版本)

名称

这是命令的小写名称。

注意:Redis 命令名称不区分大小写。

Arity(参数数量)

Arity(参数数量)是命令期望的参数个数。它遵循一个简单的模式:

  • 正整数表示固定数量的参数。
  • 负整数表示最小数量的参数。

命令的 arity 总是包含 命令本身的名称(以及适用的子命令)。

示例

  • GET 命令的 arity 是 2,因为它只接受一个参数,并且格式始终为 GET _key_
  • MGET 命令的 arity 是 -2,因为它接受至少一个参数,但也可能接受多个参数:MGET _key1_ [key2] [key3] ...

标志

命令标志是一个数组。它可以包含以下简单字符串(状态回复):

  • admin: 命令是一个管理命令。
  • asking: 即使在哈希槽迁移期间也允许执行此命令。此标志与 Redis Cluster 部署相关。
  • blocking: 命令可能会阻塞请求客户端。
  • denyoom: 如果服务器内存使用过高,则拒绝执行此命令(参见 maxmemory 配置指令)。
  • fast: 命令在常数时间或 log(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: 命令可能会修改数据。

movablekeys(可移动键)

考虑 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, BYGET 修饰符后面跟着键的名称。
  • ZUNION: numkeys 参数指定键名参数的数量。
  • MIGRATE: 键出现在 KEYS 关键字后面,并且仅当第二个参数是空字符串时。

Redis Cluster 客户端需要采用以下其他方法来定位此类命令的键。

您可以使用 COMMAND GETKEYS 命令,让您的 Redis 服务器报告给定命令调用中的所有键。

从 Redis 7.0 起,客户端可以使用键规范来识别键名的位置。对于解析键规范的客户端,唯一需要使用 COMMAND GETKEYS 的命令是 SORTMIGRATE

有关更多信息,请参阅键规范页面

第一个键

命令第一个键名参数的位置。对于大多数命令,第一个键的位置是 1。位置 0 始终是命令名称本身。

最后一个键

命令最后一个键名参数的位置。Redis 命令通常接受一个、两个或多个键。

接受单个键的命令,其 第一个键最后一个键 都设置为 1。

接受两个键名参数的命令,例如 BRPOPLPUSHSMOVERENAME,此值设置为其第二个键的位置。

接受任意数量键的多键命令,例如 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)。与使用步长值为 1MGET 不同。

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)
...

RESP2/RESP3 回复

数组回复:命令详情的嵌套列表。数组中命令的顺序是随机的。
评价此页面
返回顶部 ↑