# Command

获取 Redis 命令详情数组

语法

COMMAND
  • 可用版本:

    2.8.13

  • 时间复杂度:

    O(N) 其中 N 是 Redis 命令的总数

  • ACL 类别:

    @slow, @connection

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

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

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

集群注意事项: 此命令对于支持集群的客户端特别有用。此类客户端必须识别命令中的键名,才能将请求路由到正确的分片。尽管大多数命令都接受一个键作为它们的第一个参数,但这条规则有很多例外。您可以调用COMMAND并将命令之间的映射与其各自的密钥规范规则缓存在客户端中。

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

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

  1. Name
  2. Arity
  3. Flags
  4. First key
  5. Last key
  6. Step
  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] ....

# 标志

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

  • **admin:**该命令是一个管理命令。
  • **问:**即使在哈希槽迁移期间也允许该命令。此标志与 Redis 集群部署相关。
  • **阻塞:**该命令可能会阻塞请求的客户端。
  • denyoom:如果服务器的内存使用率太高,该命令将被拒绝(请参阅maxmemory配置指令)。
  • **快速:**命令以恒定或 log(N) 时间运行。此标志用于使用LATENCY命令监视延迟。
  • **loading:**在加载数据库时允许该命令。
  • **可移动键:**第一个键最后一个键步长值并不能确定所有键的位置。在这种情况下,客户需要使用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:**该命令可以修改数据。

# 可动keys

考虑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标志表示first keylast keystep值不足以找到所有键。

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

  • SORT: 可选的STOREBYGET修饰符后跟键名。
  • ZUNION: numkeys参数指定数字键名参数。
  • MIGRATE: 键出现KEYS关键字且仅当第二个参数为空字符串时。

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

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

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

有关详细信息,请参阅关键规格页面。

# 第一把钥匙

命令的第一个键名参数的位置。对于大多数命令,第一个键的位置是 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,它使用步长值1

# ACL 类别

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

# 命令提示

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

请查看命令提示页面以获取更多信息。

# 主要规格

这是一个由命令的关键规范组成的数组。数组中的每个元素都是一个映射,描述了在命令参数中定位键的方法。

欲了解更多信息,请查看[关键规格页面。

# 子命令

这是一个包含所有命令子命令(如果有)的数组。一些 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)
...

# 反馈

如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。

Last Updated: 4/18/2023, 8:45:33 AM