Redis作为消息队列
Redis的中消息队列的发展:
-
List队列【拉模型】
- 使用一个双向链表来构造队列;
- LPUSH:生产者发布消息
- RPOP:消费者拉取消息;
- 增加BRPOP:阻塞拉取;
- 缺点:
- 不支持重复消费【多个消费者】;
- 拉取后,消息就丢失了【需要一个Pending队列,接受确认消息,即UUID】;
- 使用一个双向链表来构造队列;
-
发布/订阅格式【推模型】:
- 可以有多个生产者和消费者【重复消费】;
- 命令:PUBLISH和SUBSCRIBE
- 支持阻塞式拉取消息;
- 缺点:
- 丢数据,发布模式,类似于消息中转站【类似于给消费者一个缓冲区】;
- 必须现有消费者订阅,然后生产者在发布;
-
Stream【流】
- 自动生成唯一id【由时间戳 + 自增序列】;
- 可以多个消费者重复消费;
- 有消费确认标记,消息不丢失;
- 消息堆积的时候,采取丢弃消息,只保留固定长度的新消息;
-
和专业消息队列对比:
- 消息不丢;
- 生产环节:宁可重发,也不能丢弃;
- 消费环节:有消费者确认机制,不会丢失
- 中间件环节:
- 根据AOF持久化异步写盘策略,可能丢失;
- 主从复制也是异步,主从切换的时候,可能丢失;
- 消息可堆积;
- 中间间是基于磁盘,可存储到磁盘;
- Redis是基于内存,有OOM溢出风险;
- 消息不丢;

浙公网安备 33010602011771号