Redis 命令提示
获取有关命令的更多信息
命令提示是字符串数组。它们为 Redis 客户端提供有关命令的额外信息。该信息可以指示 Redis 集群客户端如何在集群部署中执行命令及其输出的处理方式。
与命令的标志不同(请参阅 COMMAND
响应的第三个元素),标志严格属于服务器操作内部,提示除了向客户端报告外没有任何其他用途。
命令提示是任意字符串。但是,以下部分描述了建议的提示,并演示了它们可能遵循的约定。
nondeterministic_output
此提示表示命令的输出不是确定性的。这意味着对该命令的调用可能会在使用相同的参数和数据的情况下产生不同的结果。这种差异可能是由于命令的随机性(例如,RANDOMKEY
和 SPOP
);调用时间(例如,TTL
);或与服务器状态相关的通用差异(例如,INFO
和 CLIENT LIST
)。
注意:在 Redis 7.0 之前,此提示是random 命令标记。
nondeterministic_output_order
此提示的存在表示命令的输出是确定性的,但其排序是随机的(例如,HGETALL
和 SMEMBERS
)。
注意:在 Redis 7.0 之前,此提示是sort_for_script 标记。
request_policy
此提示可以帮助客户端在集群模式下确定要发送命令的分片。对于没有request_policy 提示的命令,客户端应该实现的默认行为如下:
- 该命令不接受键名参数:客户端可以在任意分片上执行该命令。
- 对于接受一个或多个键名参数的命令:客户端应该将命令路由到一个分片,该分片由输入键的哈希槽决定。
如果客户端应该采用与默认行为不同的行为,则request_policy 提示可以是以下之一:
- all_nodes: 客户端应该在所有节点上执行命令 - 主节点和从节点。例如,
CONFIG SET
命令。此提示被不接受键名参数的命令使用。该命令在每个分片上原子地操作。
- all_shards: 客户端应该在所有主分片上执行命令(例如,
DBSIZE
命令)。此提示被不接受键名参数的命令使用。该命令在每个分片上原子地操作。
- multi_shard: 客户端应该在多个分片上执行命令。客户端应该根据其输入键名参数的哈希槽拆分输入。例如,
DEL {foo} {foo}1 bar
命令应该拆分为DEL {foo} {foo}1
和DEL bar
。如果键被哈希到多个槽,即使所有槽都由同一个分片管理,该命令也必须被拆分。此类命令的示例包括MSET
、MGET
和DEL
。但是,请注意,SUNIONSTORE
不被认为是multi_shard,因为其所有键都必须属于同一个哈希槽。 - special: 表示客户端请求策略的非平凡形式,例如
SCAN
命令。
response_policy
此提示可以帮助客户端确定需要从集群中多个分片的回复中计算的聚合。对于没有request_policy 提示的命令,默认行为仅适用于嵌套类型(即数组、集合或映射)的回复。对于默认行为,客户端的实现应该如下:
- 该命令不接受键名参数:客户端可以在单个嵌套数据结构中聚合所有回复。例如,我们从对所有分片调用
KEYS
获得的数组回复。这些应该以任何顺序打包在一个回复中。 - 对于接受一个或多个键名参数的命令:客户端需要保留与输入键名相同的回复顺序。例如,
MGET
的聚合回复。
response_policy 提示用于回复标量数据类型的命令,或者当预期客户端实现非默认聚合时。此提示可以是以下之一:
- one_succeeded: 如果至少有一个分片没有回复错误,则客户端应该返回成功。客户端应该回复它获得的第一个非错误回复。如果所有分片都返回错误,则客户端可以回复这些错误中的任何一个。例如,考虑发送到所有分片的
SCRIPT KILL
命令。虽然脚本应该加载到集群的所有分片中,但SCRIPT KILL
通常在给定时间仅在一个分片上运行。 - all_succeeded: 只有当没有错误回复时,客户端才应该返回成功。即使单个错误回复也应该取消资格并被返回。否则,客户端应该返回一个非错误回复。例如,考虑
CONFIG SET
、SCRIPT FLUSH
和SCRIPT LOAD
命令。 - agg_logical_and: 客户端应该返回对所有回复进行逻辑AND运算的结果(仅适用于整数回复,通常来自返回0或1的命令)。例如,考虑
SCRIPT EXISTS
命令。它返回一个由0和1组成的数组,表示其给定的 SHA1 校验和是否存在于脚本缓存中。仅当所有分片都报告给定的脚本 SHA1 校验和在其各自的缓存中时,聚合回复才应该是1。 - agg_logical_or: 客户端应该返回对所有回复进行逻辑OR运算的结果(仅适用于整数回复,通常来自返回0或1的命令)。
- agg_min: 客户端应该返回回复中的最小值(仅适用于数值回复)。例如,来自集群范围内的
WAIT
命令的聚合回复应该是所有分片中的最小值(同步副本的数量)。 - agg_max: 客户端应该返回回复中的最大值(仅适用于数值回复)。
- agg_sum: 客户端应该返回回复的总和(仅适用于数值回复)。例如:
DBSIZE
. - special: 这种类型的提示表示回复策略的非平凡形式。
INFO
是一个很好的例子。
示例
redis> command info ping
1) 1) "ping"
2) (integer) -1
3) 1) fast
4) (integer) 0
5) (integer) 0
6) (integer) 0
7) 1) @fast
2) @connection
8) 1) "request_policy:all_shards"
2) "response_policy:all_succeeded"
9) (empty array)
10) (empty array)