HELLO

与Redis服务器握手。

语法

HELLO [protover [AUTH username password] [SETNAME clientname]]

引入版本:6.0.0

复杂度摘要:O(1)

切换到不同的协议版本,可选择验证连接并设置连接名称。当您不带参数或使用协议版本(2 或 3)和可选身份验证信息调用 HELLO 时,该命令还会返回服务器和连接属性。

Redis 6及更高版本支持两种协议:RESP2和RESP3。 RESP3 让 Redis 返回更多语义回复。例如,HGETALL 返回 地图 而不是 数组,因此客户端库不需要特定于命令的逻辑来将回复转换为哈希值,然后再将其返回给调用者。

在 Redis 6+ 中,连接以 RESP2 模式启动,因此实现 RESP2 的客户端不需要更新或更改。

可选参数

protover

要切换到的 RESP 协议版本(2 或 3)。如果给出任何其他选项,则为必需。

AUTH username password

除了切换到指定的协议版本之外,还对连接进行身份验证。这使得在建立新连接时无需在 HELLO 之前调用 AUTH。请注意,username 可以设置为“默认”,以针对不使用 ACL 的服务器进行身份验证,而是使用版本 6 之前的 Redis 的更简单的 requirepass 机制进行身份验证。

SETNAME clientname

设置当前连接的名称。这相当于调用CLIENT SETNAME。

详细说明

HELLO 始终回复当前服务器和连接属性的列表,例如:版本、加载的模块、客户端 ID、复制角色等。当在 Redis 6.2 或更高版本中不带任何参数调用且默认使用 RESP2 协议时,回复如下所示:

> HELLO
 1) "server"
 2) "redis"
 3) "version"
 4) "8.8.0"
 5) "proto"
 6) (integer) 2
 7) "id"
 8) (integer) 5
 9) "mode"
10) "standalone"
11) "role"
12) "master"
13) "modules"
14) ...

想要使用 RESP3 模式握手的客户端需要调用 HELLO 命令并将值“3”指定为 protover 参数,如下所示:

> HELLO 3
1# "server" => "redis"
2# "version" => "8.8.0"
3# "proto" => (integer) 3
4# "id" => (integer) 10
5# "mode" => "standalone"
6# "role" => "master"
7# "modules" => ...

由于 HELLO 回复了有用的信息,并且考虑到 protover 是可选的或可以设置为“2”,因此客户端库作者在设置连接时可以考虑使用此命令而不是规范的 PING。

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 标准
✅ 主动-主动
✅ 标准
✅ 主动-主动

返回值

RESP2

地图回复:服务器属性列表。 简单错误回复:如果请求的protover不存在。

RESP3

地图回复:服务器属性列表。 简单错误回复:如果请求的protover不存在。

资料来源:Redis 官方 HELLO 文档;中文内容参考 Redis 文档许可。