Redis 发布订阅深度解析
候选人小张在字节面试中,面试官问:
"Redis 怎么实现消息队列?"
小张说:"用 Redis 的发布订阅。"
面试官追问:"发布订阅和消息队列有什么区别?"
小张说:"...都能发消息?"
面试官继续追问:"发布订阅的消息丢失了怎么办?"
小张答不上来了。
【面试官心理】 这道题我用来测试候选人对 Redis 发布订阅机制的理解深度。能说出 PUB/SUB 命令的占 50%,能讲清和消息队列区别的占 20%,能说清缺点的占 10%。
一、发布订阅原理 🔴
1.1 基本命令
1.2 执行示例
1.3 架构图
二、发布订阅的模式 🔴
2.1 频道订阅
2.2 模式订阅
2.3 PubSub 命令
三、Redis PubSub 的问题 🟡
3.1 消息丢失
3.2 消息不持久化
3.3 ❌ 错误理解
候选人原话:"Redis 发布订阅就是消息队列。"
问题诊断:
- 发布订阅不保证消息送达
- 没有消息确认机制
- 消息不持久化
四、和消息队列的区别 🟡
4.1 对比表
4.2 Redis Stream(5.0+)
4.3 选型建议
五、Java 客户端实现 🟡
5.1 Jedis 实现
5.2 Spring Boot 实现
六、生产避坑 🟡
6.1 连接管理
6.2 订阅者断开重连
💡
Redis PubSub 适合做实时通知、广播消息等场景。如果需要可靠消息传递,使用 Redis Stream 或专业的消息队列。
【面试官心理】 能说出"Redis PubSub 消息丢失问题"的候选人,基本都有实际踩坑经验。这是 P6 的水准。