1.redis-获取redis 的command命令详情
192.168.1.2:6400> command
1) 1) "zlexcount"
2) (integer) 4
3) 1) readonly
2) fast
4) (integer) 1
5) (integer) 1
6) (integer) 1
7) 1) @read
2) @sortedset
3) @fast
2) 1) "replicaof"
2) (integer) 3
3) 1) admin
2) noscript
3) stale
4) (integer) 0
5) (integer) 0
6) (integer) 0
7) 1) @admin
2) @slow
3) @dangerous
.....................
Command
获取 Redis 命令详情数组
语法
COMMAND
可用版本:
2.8.13
时间复杂度:
O(N) 其中 N 是 Redis 命令的总数
ACL 类别:
@slow, @connection
返回一个包含每个 Redis 命令详细信息的数组。
该COMMAND命令是内省的。它的回复描述了服务器可以处理的所有命令。Redis 客户端可以在握手期间调用它来获取服务器的运行时能力。
COMMAND还有几个子命令。
集群注意事项: 此命令对于支持集群的客户端特别有用。此类客户端必须识别命令中的键名,才能将请求路由到正确的分片。
尽管大多数命令都接受一个键作为它们的第一个参数,但这条规则有很多例外。您可以调用COMMAND并将命令之间的映射与其各自的密钥规范规则缓存在客户端中。
它返回的回复是一个数组,每个命令都有一个元素。描述 Redis 命令的每个元素本身都表示为一个数组。
该命令的数组由固定数量的元素组成。数组中元素的确切数量取决于服务器的版本。
1) "auth"
2) (integer) -2
3) 1) noscript
2) loading
3) stale
4) fast
5) no_auth
4) (integer) 0
5) (integer) 0
6) (integer) 0
7) 1) @fast
2) @connection
1)Name
2)Arity
3)Flags
4)First key
5)Last key
6)Step
ACL 类别(从 Redis 6.0 开始)
提示(从 Redis 7.0 开始)
关键规范(从 Redis 7.0 开始)
子命令(从 Redis 7.0 开始)
这是小写的命令名称。
注意: Redis 命令名称不区分大小写。
Arity 是命令期望的参数数量。它遵循一个简单的模式:
正整数表示固定数量的参数。
负整数表示最少数量的参数。
命令 arity 始终包括命令的名称本身(以及适用时的子命令)。
例子:
GET 的 arity 为2,因为该命令仅接受一个参数并且始终具有格式GET _key_.
MGET的 arity 为*-2*,因为该命令至少接受一个参数,但可能接受多个参数:MGET _key1_ [key2] [key3] ....
#标志
命令标志是一个数组。它可以包含以下简单字符串(状态回复):
admin :该命令是一个管理命令。
问:即使在哈希槽迁移期间也允许该命令。此标志与 Redis 集群部署相关。
阻塞:该命令可能会阻塞请求的客户端。
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 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
7) 1) @write
2) @set
3) @sortedset
4) @list
5) @slow
6) @dangerous
...
一些 Redis 命令没有预先确定的关键位置或不容易找到。对于这些命令,movablekeys 标志表示first key、last key和step值不足以找到所有键。
以下是几个具有可移动键标志的命令示例:
SORT: 可选的STORE、BY和GET修饰符后跟键名。
ZUNION: numkeys参数指定数字键名参数。
MIGRATE: 键出现KEYS关键字且仅当第二个参数为空字符串时。
Redis 集群客户端需要使用以下其他措施来定位此类命令的键。
您可以使用该COMMAND GETKEYS命令并让您的 Redis 服务器报告给定命令调用的所有键。
从 Redis 7.0 开始,客户端可以使用键规范来识别键名的位置。唯一需要使用的命令COMMAND GETKEYS是SORT和MIGRATE用于解析密钥规范的客户端。
#第一把key
命令的第一个键名参数的位置。对于大多数命令,第一个键的位置是 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)
...