出现过阿里云 proxy 默认用 RESP2,本地 Docker 跑的用 RESP3,用的都是 redis7,结果本地异常线上没有问题。可以在 client 连接的时候直接指定协议版本
https://redis.ac.cn/docs/latest/develop/reference/protocol-spec/
RESP全称:Redis serialization protocol 。中文意思是Redis序列化协议,是英文REdis Serialization Protocol 的首部字符缩写。从1.2版本开始引入,到2.0版本正式标准化,沿用至今。6.0版本开始更新为RESP3协议,目前RESP和RESP3共存。
为了与 Redis 服务器通信,Redis 客户端使用一种称为 Redis 序列化协议 (RESP) 的协议。虽然该协议是专为 Redis 设计的,但您也可以将其用于其他客户端-服务器软件项目。
RESP 是以下考虑因素之间的权衡
RESP 可以序列化不同的数据类型,包括整数、字符串和数组。它还具有错误特定类型。客户端将请求作为字符串数组发送给 Redis 服务器。数组的内容是服务器应执行的命令及其参数。服务器的回复类型是特定于命令的。
对 RESP 协议第一个版本的支持是在 Redis 1.2 中引入的。在 Redis 1.2 中使用 RESP 是可选的,主要目的是消除协议中的一些问题。
在 Redis 2.0 中,协议的下一个版本,即 RESP2,成为客户端与 Redis 服务器的标准通信方法。
RESP3 是 RESP2 的超集,主要目的是让客户端作者的生活更轻松一些。Redis 6.0 引入了对 RESP3 功能的实验性可选支持(不包括流式字符串和流式聚合)。此外,HELLO 命令的引入允许客户端握手并升级连接的协议版本(参见客户端握手)。
直到并包括 Redis 7,RESP2 和 RESP3 客户端都可以调用所有核心命令。但是,命令可能对不同的协议版本返回不同类型的回复。
Redis 的未来版本可能会更改默认协议版本,但 RESP2 不太可能完全废弃。然而,未来版本中的新功能可能需要使用 RESP3。