命令

语法
COMMAND
从以下位置开始可用:
2.8.13
时间复杂度:
O(N),其中 N 是 Redis 命令的总数
ACL 类别:
@slow, @connection,

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

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

COMMAND还有几个子命令。 有关更多详细信息,请参阅其子命令。

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

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

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

  1. 名字
  2. 阿尔蒂
  3. 标志
  4. 第一个密钥
  5. 最后一个键
  6. ACL 类别(自 Redis 6.0 起)
  7. 提示(Redis 7.0 及以上版本)
  8. 主要规格(自 Redis 7.0 起)
  9. 子命令(自 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 KeyLast KeyStep 值并不能确定所有键位置。 客户端需要使用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、BYGET 修饰符后跟键的名称。
  • ZUNIONnumkeys 参数指定数字键名称参数。
  • MIGRATE:键出现 KEYS 关键字,并且仅当第二个参数为空字符串时。

Redis Cluster 客户端需要使用其他措施(如下所示)来查找此类命令的键。

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

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

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

第一个密钥

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

最后一个键

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

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

接受两个 key name 参数的命令,例如BRPOPLPUSH,SMOVERENAME,将此值设置为其第二个键的位置。

接受任意数量的键的多键命令,例如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:命令详细信息的嵌套列表。数组中命令的顺序是随机的。
为本页评分
返回顶部 ↑