Redis 作为消息队列的定位
Redis 本质是内存键值数据库,但基于 List、Pub/Sub、Stream 等数据结构,可以实现轻量级消息队列能力。常用于简单异步处理、缓存 + MQ 混合场景,不适合作为特别核心、强可靠的 MQ。
几种常见的队列实现方式
- List + BLPOP/BRPOP:用 List 模拟 FIFO 队列,消费者使用阻塞 POP 获取消息,实现最简单的队列模型。
- Pub/Sub:发布订阅模式,发送方发布到 channel,所有订阅者都能收到,但消息不落盘,消费者离线期间消息会丢失。
- Stream:Redis 5 引入的流式数据结构,支持消费组、消息 ID、ACK 等,功能更接近专业 MQ。
典型使用场景
- 对可靠性要求不那么高的异步任务处理
- 与缓存紧耦合的简单异步通知(如缓存失效通知)
- 小规模的实时统计、在线人数等轻量消息场景
- 使用 Stream 做业务日志、行为流水的简单收集
优缺点
优点:
- 部署简单,很多项目本身就依赖 Redis
- 读写性能高,延迟低
- 支持多种模型(List 队列、Pub/Sub、Stream)
缺点:
- 可靠性、消息堆积能力不如专业 MQ(Kafka / RocketMQ / RabbitMQ)
- 集群扩展、消息路由能力有限
- Pub/Sub 不存储消息,消费者离线期间消息直接丢弃