Redis 命令提示
获取有关命令的其他信息
命令提示是字符串数组。 这些命令为 Redis 客户端提供有关命令的其他信息。 该信息可以指示 Redis 集群客户端在集群部署中应如何执行命令以及如何处理其输出。
与命令的标志不同(请参阅COMMAND
的回复),这些消息严格属于服务器作的内部,但提示除了报告给客户端之外没有任何目的。
命令提示是任意字符串。 但是,以下部分介绍了建议的提示,并演示了它们可能遵循的约定。
nondeterministic_output
此提示表明命令的输出不是确定性的。
这意味着对命令的调用可能会产生具有相同参数和数据的不同结果。
这种差异可能是命令随机性的结果(例如RANDOMKEY
和SPOP
);调用的时间(例如TTL
);或与服务器状态相关的通用差异(例如INFO
和CLIENT LIST
).
注意:在 Redis 7.0 之前,此提示是随机命令标志。
nondeterministic_output_order
此提示的存在表明该命令的输出是确定性的,但其 Sequences 是随机的(例如HGETALL
和SMEMBERS
).
注意:在 Redis 7.0 之前,此提示是 sort_for_script 标志。
request_policy
此提示可以帮助客户端确定要在集群模式下发送命令的分片。 客户端应为没有 request_policy 提示的命令实现的默认行为如下所示:
- 该命令不接受 key name 参数:客户端可以在任意分片上执行命令。
- 对于接受一个或多个键名称参数的命令:客户端应将命令路由到单个分片,由输入键的哈希槽确定。
如果客户端应采用与默认行为不同的行为,则request_policy提示可以是以下之一:
- all_nodes:客户端应在所有节点上执行命令 - 主节点和副本节点。
一个例子是
CONFIG SET
命令。 此提示由不接受 key name 参数的命令使用。 该命令对每个分片进行原子作。
- all_shards:客户端应在所有主分片上执行命令(例如,
DBSIZE
命令)。 此提示由不接受 key name 参数的命令使用。 该命令对每个分片进行原子作。
- multi_shard:客户端需要对多个分片执行命令。
客户端应根据其 input key name 参数的哈希槽拆分 Importing。
例如,命令
DEL {foo} {foo}1 bar
应拆分为DEL {foo} {foo}1
和DEL bar
. 如果键被哈希处理到多个槽,则即使所有槽都由同一个分片管理,也必须拆分该命令。 此类命令的示例包括MSET
,MGET
和DEL
. 但是,请注意,SUNIONSTORE
不被视为 multi_shard,因为它的所有 key 都必须属于同一个哈希槽。 - special:表示客户端请求策略的一种非平凡形式,例如
SCAN
命令。
response_policy
此提示可以帮助客户端根据集群中多个分片的回复确定他们需要计算的聚合。 没有 request_policy 提示的命令的默认行为仅适用于具有嵌套类型(即数组、集合或 map)的回复。 客户端对默认行为的实现应如下所示:
- 该命令不接受 key name 参数:客户端可以将所有回复聚合到单个嵌套数据结构中。
例如,我们从调用
KEYS
对所有碎片。 这些应该以无特定顺序打包在一个 Packages 中。 - 对于接受一个或多个键名称参数的命令:客户端需要保持与输入键名称相同的回复顺序。
例如
MGET
的聚合回复。
response_policy提示是为使用标量数据类型回复的命令设置的,或者当预期客户端实现非默认聚合时。 此提示可以是以下之一:
- one_succeeded:如果至少有一个分片未回复错误,则客户端应返回 Success。
客户端应使用它获得的第一个非错误回复进行回复。
如果所有分片都返回错误,则客户端可以使用其中任何一个进行回复。
例如,考虑一个
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
command 应为所有分片中的最小值 (同步副本数)。 - agg_max:客户端应返回回复的最大值(仅适用于数字回复)。
- agg_sum:客户端应返回回复的总和(仅适用于数字回复)。
例:
DBSIZE
. - Special:这种类型的 tip 表示一种重要的回复策略形式。
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)