COMMAND

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

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

COMMAND 命令是内省的。它的回复描述了服务器可以处理的所有命令。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 命令名称不区分大小写。

参数个数

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

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

命令参数个数始终包含命令本身的名称(以及适用的子命令)。

示例

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

标记

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

  • admin: 命令是管理命令。
  • asking: 即使在哈希槽迁移期间也允许使用该命令。此标记在 Redis 集群部署中很重要。
  • 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 发布/订阅 相关。
  • 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: 可选的 STOREBYGET 修饰符后跟键的名称。
  • ZUNION: numkeys 参数指定键名称参数的数量。
  • MIGRATE: 键出现在 KEYS 关键字后,只有在第二个参数为空字符串时才会出现。

Redis 集群客户端需要使用以下其他措施来定位这些命令的键。

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

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

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

第一个键

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

最后一个键

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

接受单个键的命令(例如,BRPOPLPUSHSMOVERENAME)将第一个键最后一个键都设置为 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)。与 MGET 不同,MGET 使用步长值为 1

ACL 类别

这是一个简单的字符串数组,表示命令所属的 ACL 类别。有关更多信息,请参阅 访问控制列表 页面。

命令提示

有关命令的有用信息。供客户端/代理使用。

有关更多信息,请参阅 命令提示 页面。

键规范

这是一个包含命令键规范的数组。数组中的每个元素都是一个描述在命令参数中查找键的方法的映射。

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

子命令

这是一个包含命令所有子命令(如果有)的数组。一些 Redis 命令有子命令(例如,CONFIGREWRITE 子命令)。数组中的每个元素都表示一个子命令,并遵循与 COMMAND 回复相同的规范。

示例

以下是 GET 命令的 COMMAND 输出

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 回复

数组回复: 命令详细信息的嵌套列表。数组中命令的顺序是随机的。
RATE THIS PAGE
Back to top ↑