数据系统
Redis:缓存、限流与任务流
根据数据语义选择 String、Sorted Set 或 Stream,并理解消息确认与失败恢复。
重点能力Redis队列
Redis 不是一个万能的“快数据库”。先确定数据语义,再选择结构。
| 需求 | 建议结构 | 关键风险 |
|---|---|---|
| 结果缓存 | String + TTL | 缓存击穿与旧数据 |
| 滑动窗口限流 | Sorted Set | 清理历史成员 |
| 去重 | Set | 内存增长 |
| 后台任务 | Stream + Consumer Group | pending 与重复消费 |
Stream 必须理解的状态
XADD 追加任务;XREADGROUP 分配给消费者;处理成功后 XACK。消费者崩溃会留下 pending 任务,需要检测 idle 时间并重新认领。消费语义通常是至少一次,因此处理器仍需幂等。
可复现实验
创建两个消费者处理同一 Stream。让其中一个在确认前退出,观察 XPENDING,再由另一个消费者接管。记录重复执行发生的位置,并用 job_id 唯一约束消除副作用。
官方资料
Redis Data Types 与 Redis Streams 给出结构、消费组和确认机制。