听说 Redis 协议很简单,那今天就抓个包来一起看看吧。RESP 是 Redis 的序列化协议,一种二进制协议,支持多种数据类型。数据的第一个字节决定其类型,使用( CRLF\r\n)作为协议的终止符。目前有 RESP2 和 RESP3 两个版本。通过 Linux 上的 nc 命令和 Wireshark 来抓包,分析部分 Redis 命令。简单字符串和整数可以通过 nc 命令清楚看到每一个指令。大字符串支持 512 MB,通过 redis.conf 中的 proto-max-bulk-len 修改。针对 null 的情况,RESP2 使用 5 个字节表示,而 RESP3 设计了 Nulls 类型处理 null,但可能因版本限制无法测试。使用 Nginx 代理 TCP 流量,解决直接连接 Redis 时 Wireshark 抓不到流量的问题。Redis-cli 对 null 解析成 nil,通过 Wireshark 可以看到返回 3 个字节,刚好对上。数组使用 * 表示长度,$ 表示字符串长度。例如,list 类型的数组。Set 类型的升级到 RESP3 后,第一个字节是 ~,表示新的数据类型。没升级的情况,数组表示方式相同。Redis-cli 发出的 Request 请求,如 *2\r\n$8\r\nsmembers\r\n$5\r\nmyset\r\n,总长度为 29 字节。参考 Redis 官方文档,深入学习 RESP 协议。Redis7 已支持新的数据类型,这可能是 AI 浪潮的体现。感谢阅读,如有错误请指正。关注分享这类内容的朋友们,请别忘了点赞。