数据系统

Redis:缓存、限流与任务流

根据数据语义选择 String、Sorted Set 或 Stream,并理解消息确认与失败恢复。

重点能力Redis队列

Redis 不是一个万能的“快数据库”。先确定数据语义,再选择结构。

需求建议结构关键风险
结果缓存String + TTL缓存击穿与旧数据
滑动窗口限流Sorted Set清理历史成员
去重Set内存增长
后台任务Stream + Consumer Grouppending 与重复消费

Stream 必须理解的状态

XADD 追加任务;XREADGROUP 分配给消费者;处理成功后 XACK。消费者崩溃会留下 pending 任务,需要检测 idle 时间并重新认领。消费语义通常是至少一次,因此处理器仍需幂等。

可复现实验

创建两个消费者处理同一 Stream。让其中一个在确认前退出,观察 XPENDING,再由另一个消费者接管。记录重复执行发生的位置,并用 job_id 唯一约束消除副作用。

官方资料

Redis Data Types 与 Redis Streams 给出结构、消费组和确认机制。