Redis作为消息队列

Redis的中消息队列的发展:

  • List队列【拉模型】

    • 使用一个双向链表来构造队列;
      • LPUSH:生产者发布消息
      • RPOP:消费者拉取消息;
    • 增加BRPOP:阻塞拉取;
    • 缺点:
      • 不支持重复消费【多个消费者】;
      • 拉取后,消息就丢失了【需要一个Pending队列,接受确认消息,即UUID】;
  • 发布/订阅格式【推模型】:

    • 可以有多个生产者和消费者【重复消费】;
    • 命令:PUBLISH和SUBSCRIBE
    • 支持阻塞式拉取消息;
    • 缺点:
      • 丢数据,发布模式,类似于消息中转站【类似于给消费者一个缓冲区】;
      • 必须现有消费者订阅,然后生产者在发布;
  • Stream【流】

    • 自动生成唯一id【由时间戳 + 自增序列】;
    • 可以多个消费者重复消费;
    • 有消费确认标记,消息不丢失;
    • 消息堆积的时候,采取丢弃消息,只保留固定长度的新消息;
  • 和专业消息队列对比:

    • 消息不丢;
      • 生产环节:宁可重发,也不能丢弃;
      • 消费环节:有消费者确认机制,不会丢失
      • 中间件环节:
        • 根据AOF持久化异步写盘策略,可能丢失;
        • 主从复制也是异步,主从切换的时候,可能丢失;
    • 消息可堆积;
      • 中间间是基于磁盘,可存储到磁盘;
      • Redis是基于内存,有OOM溢出风险;
posted @ 2025-06-16 16:46  烟雨断桥  阅读(9)  评论(0)    收藏  举报