跳到主要内容

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 限流场景