跳到主要内容

Redis 消息队列

一、Redis 消息队列简介​

1.1 Redis 作为消息队列的优缺点​

1.2 适用场景​

1.3 与专业消息队列对比​

二、Redis 消息队列实现方式​

2.1 List 实现队列​

2.2 Pub/Sub 实现消息队列​

2.3 Stream 实现消息队列​

2.4 Sorted Set 实现延迟队列​

2.5 基于 Key 过期通知​

三、List 实现消息队列​

3.1 基本命令​

  • LPUSH / RPUSH
  • LPOP / RPOP
  • BLPOP / BRPOP

3.2 简单队列实现​

  • 生产者
  • 消费者

3.3 阻塞读取​

3.4 优缺点​

3.5 使用场景​

四、Pub/Sub 模式​

4.1 基本命令​

  • PUBLISH
  • SUBSCRIBE
  • UNSUBSCRIBE
  • PSUBSCRIBE

4.2 发布订阅实现​

4.3 模式订阅​

4.4 优缺点​

4.5 使用场景​

五、Redis Stream(推荐)​

5.1 Stream 概念​

  • Stream 结构
  • 消息 ID
  • 消费者组

5.2 基本命令​

  • XADD
  • XREAD
  • XREADGROUP
  • XACK
  • XGROUP
  • XDEL
  • XTRIM

5.3 生产者实现​

5.4 消费者实现​

5.5 消费者组​

5.6 消息确认​

5.7 消息pending​

5.8 消息修剪​

六、延迟队列实现​

6.1 Sorted Set 实现延迟队列​

6.2 实现原理​

  • Score 作为时间戳
  • Member 作为任务 ID

6.3 生产者实现​

6.4 消费者实现​

6.5 定时轮询​

6.6 使用场景​

七、Redis 消息队列特性​

7.1 消息持久化​

  • RDB
  • AOF

7.2 消息可靠性​

7.3 消息顺序​

7.4 消息重复消费​

7.5 消息堆积​

八、Redis Stream 高级特性​

8.1 消息过滤​

8.2 消息字段​

8.3 消息长度限制​

8.4 消费者组特性​

  • ACK 机制
  • Pending 消息
  • 消息重试

8.5 消息查询​

8.6 消息统计​

九、Redis 消息队列集群​

9.1 主从复制​

9.2 哨兵模式​

9.3 Cluster 模式​

9.4 高可用配置​

十、Redis 客户端开发​

10.1 Java 客户端(Jedis/Lettuce)​

  • List 队列实现
  • Stream 实现
  • Spring Data Redis 集成

10.2 Python 客户端​

10.3 Go 客户端​

10.4 Node.js 客户端​

十一、Spring Boot 集成​

11.1 依赖配置​

11.2 配置类​

11.3 RedisTemplate​

11.4 消息监听器​

11.5 消息发布​

十二、Redis 消息队列实战​

12.1 异步任务处理​

12.2 订单超时取消​

12.3 秒杀系统​

12.4 定时任务调度​

12.5 分布式锁​

十三、性能优化​

13.1 Pipeline 优化​

13.2 批量操作​

13.3 连接池配置​

13.4 内存优化​

13.5 持久化优化​

十四、监控和运维​

14.1 监控指标​

14.2 告警配置​

14.3 日志监控​

14.4 性能监控​

十五、常见问题​

15.1 消息丢失​

15.2 消息重复消费​

15.3 消息顺序性​

15.4 消息积压​

15.5 内存溢出​

15.6 性能瓶颈​

十六、最佳实践​

16.1 消息设计​

16.2 错误处理​

16.3 重试机制​

16.4 死信处理​

16.5 监控告警​

16.6 限流保护​

十七、对比其他消息队列​

17.1 vs RabbitMQ​

17.2 vs Kafka​

17.3 vs RocketMQ​

17.4 选型建议​

十八、应用场景总结​

18.1 轻量级消息队列​

18.2 实时性要求高的场景​

18.3 简单的发布订阅​

18.4 延迟任务​

18.5 限流场景​