Redis中几种消息队列的实现方式

目录

    • 一、Redis中几种消息队列实现的总结
    • 1.1、基于List的 LPUSH+BRPOP的实现
    • 1.2、基于Sorted-Set的实现
    • 1.3、PUB/SUB(订阅/发布模式)
    • 1.4、基于Stream类型的实现

一、Redis中几种消息队列实现的总结

1.1、基于List的 LPUSH+BRPOP的实现

  • 足够简单,消费消息延迟几乎为零,但是需要处理空闲连接的问题。
  • 如果线程一直阻塞在那里,Redis客户端的连接就成了闲置连接,闲置过久,服务器一般会主动断开连接,减少闲置资源占用,这个时候blpop和brpop或抛出异常,所以在编写客户端消费者的时候要小心,如果捕获到异常,还有重试。
  • 其他缺点包括:做消费者确认ACK麻烦,不能保证消费者消费消息后是否成功处理的问题(宕机或处理异常等),通常需要维护个Pending列表,保证消息处理确认,不能做广播模式,如pub/sub,消息发布/订阅模型,不能重复消费,一旦消费就会被删除;不支持分组消费

1.2、基于Sorted-Set的实现

  • 多用来实现延迟队列,当然也可以实现有序的普通的消息队列,但是消费者无法阻塞的获取消息,只能轮询,不允许重复消息。

1.3、PUB/SUB(订阅/发布模式)

  • 优点:典型的广播模式,一个消息可以发布到多个消费者,多信道订阅,消费者可以同时订阅多个信道,从而接收多类消息,消息即时发送,消息不用等待消费者读取,消费者会自动接收到信道发布的消息。
  • 缺点:消息一旦发布,不能接收。换句话就是发布时若客户端不在线,则消自丢失,不能寻回,不能保证每个消费者接收的时间是一致的,若消费者客户端出现消息积压,到一定程度,会被强制断开,导致消息意外丢失。通常发生在消息的生产远大于消费速度时,可见,Pub/Sub 模式不适合做消息存储,消息和压类的业务,而是擅长处理播,即时通讯,即时反馈的业务。

1.4、基于Stream类型的实现

  • 基本上已经有了一个消息中间件的雏形,可以考虑在生产过程中使用。

你可能感兴趣的:(redis,redis)