Redis HELLO 怎样查看服务器协议与认证返回值
来源:17golang原创
时间:2026-11-03 04:52:24 151浏览 收藏
Redis 连接建立后,想确认服务端支持哪种 RESP 协议、当前连接属于哪个实例,或者想把认证和连接命名放进一次握手,应该看 HELLO。它不是只返回一个“连通”结果:Redis 官方文档说明,HELLO 可以切换 RESP2/RESP3,并返回版本、连接 ID、运行模式、角色和模块等属性。
官方地址:https://redis.io/docs/latest/commands/hello/
实用结论:普通探活继续用PING;连接初始化或协议排障使用HELLO 2、HELLO 3,需要认证时把AUTH username password放在同一条 HELLO 中。认证失败时连接不会切换到 RESP3,仍要按 RESP2 失败路径处理。
HELLO 负责什么:协议协商与连接初始化
Redis 6 及以后支持 RESP2 和 RESP3。新连接默认从 RESP2 开始,因此老客户端仍可工作;客户端明确发送 HELLO 3 后,才把当前连接切到 RESP3。HELLO 的时间复杂度是 O(1),它更像“连接能力说明 + 协议握手”,而不是业务数据命令。

它和 PING 的分工可以这样记:
| 命令 | 主要用途 | 能得到什么 |
|---|---|---|
PING | 连通性探活 | 简单的 PONG 或消息回显 |
HELLO | 连接初始化与能力确认 | 协议版本、服务器属性、可选认证和连接名 |
用 redis-cli 读取协议和认证返回值
下面的命令只使用占位密码,适合先看命令形态。没有认证要求时,直接查询当前连接上下文;指定协议版本时,命令会同时协商协议。
# 查看当前连接的协议和服务器属性,不切换协议 redis-cli -h 127.0.0.1 -p 6379 HELLO # 明确保持 RESP2,便于兼容旧客户端的返回处理 redis-cli -h 127.0.0.1 -p 6379 HELLO 2 # 请求 RESP3;连接名用于在连接列表中识别该客户端 redis-cli -h 127.0.0.1 -p 6379 HELLO 3 SETNAME article-reader # 在新连接初始化时同时协商 RESP3 并认证;密码仅为示例占位符 redis-cli -h 127.0.0.1 -p 6379 HELLO 3 AUTH default 'YOUR_PASSWORD'
AUTH 只能跟在协议版本后面;SETNAME 等价于给当前连接设置名称。若服务端使用 Redis 6 以前的版本,可能返回未知命令;若协议版本不存在,则会返回协议错误。命令输出不要当成固定字段顺序,RESP2 和 RESP3 的呈现方式不同,客户端应按字段读取。
返回值怎样读:字段与失败状态
成功返回通常包含以下信息。server 表示服务端类型,version 是版本,proto 是当前协议;RESP3 还会返回 id、mode、role 和 modules 等连接或实例属性。

# 只筛选返回中常用的协议、版本和角色字段,避免把整段输出写入日志 # 说明:示例使用文本过滤,生产程序应使用客户端库的结构化响应 redis-cli -h 127.0.0.1 -p 6379 --raw HELLO 3 | grep -E '^(server|version|proto|id|mode|role|modules)$'
这个过滤示例的目的只是帮助快速定位字段,不代表所有版本都按同样顺序输出。更稳妥的程序逻辑是:先判断命令是否成功,再读取 proto;把 server、version 作为诊断信息,把 id、mode、role 作为连接上下文。
认证失败和旧服务端怎样降级
当 HELLO 3 AUTH default wrong-password 的凭据不对时,服务端会返回错误,不会完成协议切换,连接仍处于 RESP2。客户端不要在收到失败后直接按 RESP3 解码下一条响应;应记录错误、关闭或修复连接,再从明确的 RESP2/RESP3 初始化路径重试。
兼容策略可以分成三类:
- 服务端支持 HELLO 且支持 RESP3:发送
HELLO 3,成功后按 RESP3 处理。 - 服务端支持 HELLO 但只接受 RESP2:发送
HELLO 2或无参数 HELLO,并保持 RESP2 解码。 - 服务端不认识 HELLO 或认证失败:把错误作为连接初始化失败,不把它混同为业务命令失败。
如果客户端库已经封装了连接握手,优先使用库提供的协议和认证配置;直接拼接命令时必须确保密码不进入普通日志,并在连接关闭或重建时重新设置 SETNAME。
常见问题
HELLO 能完全替代 PING 吗?
不能完全替代。HELLO 适合握手和能力确认,PING 更适合轻量连通性探活;监控探活不需要每次都切换协议或记录一整组连接属性。
为什么 HELLO 3 失败后仍像 RESP2?
因为协议切换只有在 HELLO 成功后才生效。协议版本不支持、命令不存在或 AUTH 失败都会让连接停留在原来的 RESP2 状态。
把 HELLO 放在连接初始化边界,先判断返回是否成功,再决定响应解码方式;把 server/version/proto 用作能力确认,把 id/mode/role 用作连接排障信息,就能避免把“认证成功”“协议切换成功”和“服务端可达”混成一个结论。
-
117 收藏
-
426 收藏
-
171 收藏
-
113 收藏
-
195 收藏
-
372 收藏
-
245 收藏
-
440 收藏
-
123 收藏
-
353 收藏
-
249 收藏
-
163 收藏
-
368 收藏
-
117 收藏
-
255 收藏
-
490 收藏
-
496 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习