你好
Syntax
HELLO [protover [AUTH username password] [SETNAME clientname]]
- Available since:
- 6.0.0
- Time complexity:
- O(1)
- ACL categories:
-
@fast
,@connection
,
切换到不同的协议,可选择进行身份验证并设置连接名称,或提供上下文客户端报告。
Redis 版本 6 及以上支持两种协议:旧协议 RESP2 和 Redis 6 引入的新协议 RESP3。RESP3 具有某些优势,因为当连接处于此模式时,Redis 能够以更具语义的回复进行响应:例如,HGETALL
将返回一个映射类型,因此客户端库实现不再需要提前知道将数组转换为哈希再返回给调用者。有关 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
命令,并将protover
参数的值指定为"3",如下所示:
> 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
: 除了切换到指定的协议版本外,直接对连接进行认证。这使得在建立新连接时,在HELLO
之前调用AUTH
变得不必要。请注意,username
可以设置为"default",以对不使用ACLs的服务器进行认证,而是使用Redis 6之前更简单的requirepass
机制。SETNAME
: 这相当于调用CLIENT SETNAME
。
RESP2/RESP3 回复
Map reply: a list of server properties. Simple error reply: if theprotover
requested does not exist.
历史
- 从Redis版本6.2.0开始:
protover
变为可选;当不带参数调用时,该命令报告当前连接的上下文。