命令

语法
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 命令名称不区分大小写。

阿尔蒂

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

RESP2/RESP3 回复

Array reply:命令详细信息的嵌套列表。数组中命令的顺序是随机的。