Redis 命令提示
获取有关命令的其他信息
命令提示是一组字符串。它们为 Redis 客户端提供有关命令的其他信息。这些信息可以指导 Redis 集群客户端如何执行命令及其输出在集群部署中如何处理。
与命令标记(请参阅 COMMAND
回复的第 3 个元素)不同,命令标记严格用于服务器操作内部,提示不提供任何其他目的,除了向客户端报告。
命令提示是任意字符串。但是,以下部分描述了建议的提示并展示了它们可能遵循的惯例。
nondeterministic_output
此提示表示命令的输出不确定。这意味着使用相同参数和数据调用命令可能会产生不同的结果。这种差异可能是由于命令的随机性(例如,RANDOMKEY
和 SPOP
);调用的时间(例如,TTL
);或与服务器状态相关的通用差异(例如,INFO
和 CLIENT LIST
)。
注意:在 Redis 7.0 之前,此提示是随机命令标记。
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:客户端应返回对所有回复执行逻辑AND运算的结果(仅适用于整数回复,通常来自返回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)