HELLO
语法
HELLO [protover [AUTH username password] [SETNAME clientname]]
- 可用版本
- Redis 开源版 6.0.0
- 时间复杂度
- O(1)
- ACL 类别
-
@fast
,@connection
,
切换到不同的协议,可选进行身份验证并设置连接名称,或提供客户端上下文报告。
Redis 6 及以上版本支持两种协议:旧协议 RESP2,以及随 Redis 6 引入的新协议 RESP3。RESP3 具有某些优势,因为当连接处于此模式时,Redis 能够返回更具语义的回复:例如,HGETALL
将返回一个 map 类型,因此客户端库实现不再需要事先知道如何将数组转换为哈希后再返回给调用者。有关 RESP3 的完整介绍,请查看 RESP3 规范。
在 Redis 6 中,连接默认以 RESP2 模式启动,因此实现 RESP2 的客户端无需更新或更改。短期内没有计划放弃对 RESP2 的支持,尽管未来版本可能会默认使用 RESP3。
HELLO
命令总是回复当前服务器和连接属性列表,例如:版本、已加载模块、客户端 ID、复制角色等。在 Redis 6.2 中,当未指定任何参数且默认使用 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)
希望使用 RESP3 模式进行握手的客户端需要调用 HELLO
命令并将值 "3" 指定为 protover
参数,如下所示
> HELLO 3
1# "server" => "redis"
2# "version" => "6.0.0"
3# "proto" => (integer) 3
4# "id" => (integer) 10
5# "mode" => "standalone"
6# "role" => "master"
7# "modules" => (empty array)
由于 HELLO
会回复有用的信息,并且 protover
参数是可选的或可以设置为 "2",客户端库的开发者在建立连接时可能会考虑使用此命令而不是标准的 PING
命令。
当调用时带有可选的 protover
参数,此命令会将协议切换到指定的版本,并且还接受以下选项
AUTH <username> <password>
:除了切换到指定的协议版本外,还直接对连接进行身份验证。这使得在建立新连接时,无需在HELLO
之前调用AUTH
。请注意,可以将username
设置为 "default" 以针对不使用 ACL,而是使用 Redis 6 版本之前的更简单的requirepass
机制的服务器进行身份验证。SETNAME <clientname>
:这相当于调用CLIENT SETNAME
命令。
RESP2/RESP3 回复
Map 回复:服务器属性列表。Simple 错误回复:如果请求的protover
不存在。历史
- 从 Redis 6.2.0 版本开始:
protover
变为可选参数;当不带参数调用时,命令会报告当前连接的上下文。