Redis 传输协议精讲
Redis 传输协议精讲
理解 RESP 协议,是理解 Redis 一切行为的基石。
为什么学习 RESP 协议?
大多数开发者通过客户端库(Client Library)与 Redis 交互,很少关注底层传输协议。但当你遇到以下场景时,协议知识就成了绕不开的门槛:
| 场景 | 需要协议知识的原因 |
|---|---|
| 开发自定义客户端 | 必须正确编码/解码 RESP 帧 |
| 排查网络问题 | 需要读懂抓包中的 Redis 数据 |
| 实现代理/中间件 | 需要解析和转发 RESP 流 |
| 性能优化 | Pipeline、批量操作依赖协议特性 |
| 协议升级(RESP2 → RESP3) | 了解新类型才能利用新功能 |
| 调试 Lua 脚本 | 脚本的输入输出遵循 RESP 规范 |
教程结构
本教程共 12 章,由浅入深覆盖 RESP 协议的方方面面:
| 章节 | 标题 | 核心内容 |
|---|---|---|
| 01 | RESP 协议概述 | 版本演进、设计哲学、与 Memcached 对比 |
| 02 | RESP2 格式详解 | 五种基础类型的编码规则与解析 |
| 03 | RESP3 新类型 | 双精度、布尔、Map、Set 等扩展类型 |
| 04 | 命令格式与发送 | 命令编码、多命令、内联命令 |
| 05 | Pipeline 管道机制 | 批量发送、RTT 优化、实现原理 |
| 06 | 发布订阅协议 | SUBSCRIBE、PSUBSCRIBE、消息格式 |
| 07 | 事务协议 | MULTI/EXEC、WATCH 乐观锁 |
| 08 | Lua 脚本协议 | EVAL/EVALSHA、脚本缓存、调试 |
| 09 | 哨兵协议 | Sentinel 发现、健康检查、故障转移 |
| 10 | 集群协议 | MOVED/ASK 重定向、槽位迁移 |
| 11 | 代理实现 | Codis、Twemproxy、连接池与路由 |
| 12 | 最佳实践 | 驱动开发、连接管理、序列化、安全 |
阅读建议
- 初学者:按顺序阅读 01 → 02 → 04 → 05 → 12,掌握基础即可应对日常开发
- 中间件开发者:重点阅读 02、03、05、10、11,这是代理/路由的核心知识
- 运维工程师:重点阅读 06、07、09、10,理解集群与高可用的协议细节
- 客户端作者:全部阅读,尤其关注 02、03、04、05、12
环境准备
# 安装 Redis 7.x(支持 RESP3)
sudo apt install redis-server
# 验证版本
redis-server --version
# Redis server v=7.2.4 ...
# 启动 Redis CLI(raw 模式,便于观察协议)
redis-cli --raw
# 使用 telnet 直接观察协议(推荐学习方式)
telnet 127.0.0.1 6379
约定说明
| 符号 | 含义 |
|---|---|
\r\n | CRLF,RESP 协议的行终结符 |
<type> | 协议类型标识(如 +, -, :, $, *) |
→ | 客户端 → 服务器方向 |
← | 服务器 → 客户端方向 |
提示:本教程所有示例均可在本地 Redis 实例上直接运行。建议使用
telnet或nc工具手动发送原始协议数据,以获得最直观的学习体验。