命令

Syntax
COMMAND
Available since:
2.8.13
Time complexity:
O(N) where N is the total number of Redis commands
ACL categories:
@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 是命令期望的参数数量。 它遵循一个简单的模式:

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

命令的参数数量总是包括命令本身的名称(以及在适用时包括子命令)。

示例:

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

标志

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

  • admin: 该命令是一个管理命令。
  • asking: 即使在哈希槽迁移期间也允许该命令。 此标志在Redis集群部署中相关。
  • blocking: 该命令可能会阻塞请求的客户端。
  • denyoom: 如果服务器的内存使用率过高,命令将被拒绝(请参阅maxmemory配置指令)。
  • 快速: 该命令在常数或对数(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: 该命令可能会修改数据。

可移动键

考虑 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命令通常接受一个、两个或多个键。

接受单个键的命令将第一个键最后一个键都设置为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 不同,后者使用的步长值为 1

ACL 类别

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

命令提示

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

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

关键规格

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

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

子命令

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

示例

以下是COMMANDGET命令的输出:

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: a nested list of command details. The order of the commands in the array is random.
RATE THIS PAGE
Back to top ↑