HELLO protover [AUTH username password] [SETNAME clientname]

Redis hello 命令将连接切换到其他协议。

Redis 6或更高版本能够支持两种协议,即旧协议RESP2和随Redis 6 RESP3引入的新协议。

RESP3具有某些优点,当连接处于此模式时,Redis可以使用更多语义上的答复:例如HGETALL将返回一个map类型,因此客户端库实现不再需要事先知道将数组转换为哈希,然后再将其返回给调用方。有关RESP3的完整介绍,请参考这里

Redis 6连接默认以RESP2模式启动,因此实现RESP2的客户端无需更改(也没有短期计划放弃对RESP2的支持)。

想要使用RESP3模式的客户端需要使用“ 3”作为第一个参数来调用 HELLO命令。

> 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)

命令的应答含有一些关于服务器的信息:Redis的版本,加载的模块组,客户端ID,复制的角色等。

因此,考虑到HELLO命令也以“ 2”作为参数,为了将协议降级至版本2,或者只是为了从服务器获取答复而无需切换协议,客户端库作者可以考虑建立连接时使用此命令而不是PING

此命令接受两个非强制性选项:

  • AUTH <username> <password>: 直接验证连接,而不切换到指定的协议。这样,在建立新连接时,无需在HELLO之前调用AUTH。请注意,可以将用户名设置为“默认”,以便针对不使用ACL而是使用版本6之前的Redis的requirepass简单机制的服务器进行身份验证。
  • SETNAME <clientname>: 等效于 CLIENT SETNAME.

*返回值

数组: 服务器属性的列表。选择RESP3时,答复是映射而不是数组。如果请求的协议不存在,该命令将返回错误。