RESP3 与 HELLO 握手
HELLO 3 让当前连接从 RESP2 切换到 RESP3:协议层新增映射、集合、布尔、双精度等原生类型,推送消息也有了统一形式,客户端缓存等功能依赖这套机制。切换前要确认服务端版本支持 HELLO 命令、客户端 SDK 已实现 RESP3 解析,否则问题会以类型解析错误的形式出现,而不是干脆的连接失败。
基本信息
| 相关命令 | HELLO 与 HELLO 3 |
|---|---|
| 服务端要求 | Redis 6 及以上支持 HELLO 与 RESP3 |
| 客户端要求 | SDK 需实现 RESP3 类型解析,各版本差异较大 |
| 主要收益 | 类型语义更贴合,推送消息形式统一 |
| 混部状态 | RESP2 与 RESP3 连接同时存在是常态 |
典型使用场景
- 新客户端接入:按连接粒度切换,逐个验证后再推广
- 客户端缓存:该能力建立在 RESP3 的推送机制之上
- 类型处理简化:字典类结构不必在客户端做额外转换
- 灰度验证:先让部分连接走新协议,对比错误率与延迟
- 排障对照:复现问题时先确认连接实际使用的协议版本
切换与核对
切换与核对
redis-cli HELLO 3 # 切换当前交互连接为 RESP3
redis-cli -3 # 启动时即以 RESP3 建立连接
redis-cli HELLO # 查看当前连接协议与服务端信息
redis-cli HELLO 2 # 切回 RESP2 做对照
redis-cli INFO server | grep redis_version # 确认服务端版本是否支持切换核对项
| 核对项 | 要求 | 不满足的后果 |
|---|---|---|
| 服务端版本 | 支持 HELLO 命令 | 命令直接报错,无法切换 |
| SDK 解析能力 | 已实现 RESP3 类型映射 | 解析异常而非连接失败,定位更费时 |
| 扩展能力依赖 | 如客户端缓存需客户端配套实现 | 功能不可用 |
| 回退路径 | 能按连接切回 RESP2 | 出问题只能整体回滚 |
协议切换按客户端逐一验证,不要一次性全量打开:混部期间两套协议并存是常态,服务端不会因为部分连接使用 RESP3 而出问题。
SDK 兼容性没验证就全量切换,错误会集中爆发且表现为解析异常;把它当客户端改造项目来排期,而不是一次配置变更。