HELLO

用法
HELLO [ protover [ AUTH username password ] [ SETNAME clientname ] ]
复杂度
O(1)
始于
6.0.0
ACL 类别
@connection, @fast

切换到不同的协议,可选地进行身份验证并设置连接名称,或提供上下文客户端报告。

Valkey 支持两种协议:RESP2 和 RESP3。RESP3 具有某些优势,因为当连接处于此模式时,Valkey 能够回复更具语义的响应:例如,HGETALL 将返回一个 map 类型,因此客户端库实现不再需要预先知道如何将数组转换为哈希再返回给调用者。有关 RESP3 的完整内容,请查阅 RESP3 规范

Valkey 连接以 RESP2 模式启动,因此实现 RESP2 的客户端无需更新或更改。目前没有短期计划放弃对 RESP2 的支持,尽管未来版本可能会默认使用 RESP3。

HELLO 始终回复当前服务器和连接属性列表,例如:版本、已加载模块、客户端 ID、复制角色等。availability_zone 字段仅在配置文件中设置时显示,有关详细信息请参阅 availability-zone 配置,此功能在 Valkey 8.1 中添加。

当不带任何参数且默认使用 RESP2 协议调用时,响应如下所示

> HELLO
 1) "server"
 2) "redis"
 3) "version"
 4) "255.255.255"
 5) "proto"
 6) (integer) 2
 7) "id"
 8) (integer) 5
 9) "mode"
10) "standalone"
11) "role"
12) "master"
13) "modules"
14) (empty array)
15) "availability_zone"
16) "us-east-1"

希望使用 RESP3 模式进行握手的客户端需要调用 HELLO 命令并将值 "3" 指定为 protover 参数,如下所示

> HELLO 3
1# "server" => "redis"
2# "version" => "7.2.4"
3# "proto" => (integer) 3
4# "id" => (integer) 10
5# "mode" => "standalone"
6# "role" => "master"
7# "modules" => (empty array)
8# "availability_zone" => "us-east-1"

由于 HELLO 会回复有用的信息,并且 protover 是可选的或可以设置为 "2",因此客户端库作者在建立连接时可以考虑使用此命令而不是典型的 PING

当带可选的 protover 参数调用时,此命令会将协议切换到指定版本,并接受以下选项

  • AUTH <username> <password>:除了切换到指定的协议版本外,还直接对连接进行身份验证。这使得在设置新连接时,无需在 HELLO 之前调用 AUTH。请注意,当服务器不使用 ACL 而使用更简单的 requirepass 机制时,username 可以设置为 "default" 进行身份验证。
  • SETNAME <clientname>:这相当于调用 CLIENT SETNAME

RESP2/RESP3 响应

Map 响应:服务器属性列表。

简单错误响应:如果请求的 protover 不存在。

历史

版本 变更
8.1.0

如果设置了 availability-zone 配置,响应中会添加一个新的 availability_zone 字段。

6.2.0

protover 参数变为可选;当不带参数调用时,此命令报告当前连接的上下文。