1. 引子
redis中有list数据类型,通过list可以实现生产者和消费者。
2. 生产者
使用rpush命令将消息从右边推入链表。
3. 消费者
使用lpop命令将消息从左边弹出链表。
但是如果list中没有消息时,lpop命令会直接返回空。如果想使用该命令的时候能阻塞一会呢?可以使用blpop命令,该命令可以设置阻塞时间,如果超过指定时间仍没有数据再返回空,如果有消息就可以马上返回。因此使用该命令更加及时。
4. 发布/订阅模式
前面的命令都是一个消息只能被一个生产者消费。
发布/订阅模式指的是:
- 发送者发送消息,订阅者接受消息,同一个主题的消息可能有多个消费者订阅。
- 订阅者可以订阅任意数量的主题。
订阅主题的命令为:subscribe topicName
发布消息的命令为:publish topicName "..."
这样如果有两个消费者都订阅了同一条消息,那么当有一个生产者发送一条消息到此topic下后,这两位消费者都会获取到该消息。
注意:使用redis的发布订阅不能保证消息一定到达消费者,有可能会出现消息丢失的情况。因为消费者执行subscribe命令后,就开始阻塞一直等待消息,如果消费者下线退出该命令后,有新的消息发送过来,消费者再上线是收不到该消息的。
所以建议使用专业的消息队列中间件。
网友评论