Redis 命令提示

获取有关命令的额外信息

命令提示是字符串数组。它们为 Redis 客户端提供有关命令的额外信息。这些信息可以指导 Redis Cluster 客户端如何在集群部署中执行命令并处理其输出。

与命令标志(参见 COMMAND 回复的第三个元素)不同,命令标志严格属于服务器内部操作,而提示除了向客户端报告之外没有任何其他用途。

命令提示是任意字符串。然而,以下部分描述了建议的提示并展示了它们可能遵循的约定。

nondeterministic_output

此提示表示命令的输出是非确定性的。这意味着使用相同的参数和数据调用命令可能会产生不同的结果。这种差异可能是由于命令的随机性质(例如,RANDOMKEYSPOP);调用的时机(例如,TTL);或与服务器状态相关的通用差异(例如,INFOCLIENT LIST)。

注意:在 Redis 7.0 之前,此提示是 random 命令标志。

nondeterministic_output_order

此提示的存在表明命令的输出是确定性的,但其顺序是随机的(例如,HGETALLSMEMBERS)。

注意:在 Redis 7.0 之前,此提示是 sort_for_script 标志。

request_policy

此提示可以帮助客户端确定在集群模式下应将命令发送到哪些分片。对于没有 request_policy 提示的命令,客户端应实现的默认行为如下:

  1. 命令不接受键名参数:客户端可以在任意分片上执行命令。
  2. 对于接受一个或多个键名参数的命令:客户端应根据输入键的哈希槽将命令路由到一个分片。

在客户端应采用与默认行为不同的行为的情况下,request_policy 提示可以是以下之一:

  • all_nodes: 客户端应在所有节点(包括主节点和副本节点)上执行命令。例如,CONFIG SET 命令。此提示用于不接受键名参数的命令。该命令在每个分片上原子操作。
  • all_shards: 客户端应在所有主分片上执行命令(例如,DBSIZE 命令)。此提示用于不接受键名参数的命令。该命令在每个分片上原子操作。
  • multi_shard: 客户端应在多个分片上执行命令。客户端应根据输入键名参数的哈希槽拆分输入。例如,命令 DEL {foo} {foo}1 bar 应拆分为 DEL {foo} {foo}1DEL bar。如果键被哈希到不止一个槽,即使所有槽都由同一个分片管理,命令也必须拆分。此类命令的例子包括 MSETMGETDEL。但请注意,SUNIONSTORE 不被视为 multi_shard,因为它的所有键必须属于同一个哈希槽。
  • special: 表示客户端请求策略的一种非简单形式,例如 SCAN 命令。

response_policy

此提示可以帮助客户端确定需要从集群中多个分片的回复计算的聚合结果。对于没有 request_policy 提示的命令,默认行为仅适用于嵌套类型的回复(即,数组、集合或映射)。客户端对默认行为的实现应如下:

  1. 命令不接受键名参数:客户端可以将所有回复聚合到单个嵌套数据结构中。例如,从所有分片调用 KEYS 命令获取的数组回复。这些回复应打包到一个中,顺序不限。
  2. 对于接受一个或多个键名参数的命令:客户端需要保持回复顺序与输入键名一致。例如,MGET 的聚合回复。

response_policy 提示为回复标量数据类型或预期客户端实现非默认聚合的命令设置。此提示可以是以下之一:

  • one_succeeded: 如果至少有一个分片未回复错误,客户端应返回成功。客户端应返回其获得的第一个非错误回复。如果所有分片都返回错误,客户端可以返回其中任何一个错误。例如,考虑一个发送到所有分片的 SCRIPT KILL 命令。尽管脚本应加载到集群的所有分片中,但 SCRIPT KILL 通常在给定时间只在一个分片上运行。
  • all_succeeded: 仅当没有错误回复时,客户端才应返回成功。即使是一个错误回复也应导致聚合无效并被返回。否则,客户端应返回其中一个非错误回复。例如,考虑 CONFIG SETSCRIPT FLUSHSCRIPT LOAD 命令。
  • agg_logical_and: 客户端应返回所有回复的逻辑 AND 运算结果(仅适用于整数回复,通常来自返回 01 的命令)。例如,考虑 SCRIPT EXISTS 命令。它返回一个由 01 组成的数组,表示给定的 SHA1 和是否存在于脚本缓存中。仅当所有分片都报告给定脚本 SHA1 和存在于其各自缓存中时,聚合回复才应为 1
  • agg_logical_or: 客户端应返回所有回复的逻辑 OR 运算结果(仅适用于整数回复,通常来自返回 01 的命令)。
  • 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)
评价本页面
返回顶部 ↑