redis的发布订阅

所谓发布订阅,其实就是一个生产者消费者模型:redis

如上图:由发布者将消息发布到频道,再由订阅者去订阅频道,这样一来,发布者每发布一条消息到对应频道,那么订阅了该频道的订阅者所有都会收到消息 (注意:若是一个新的订阅者订阅频道,那么它是没法收到历史消息的,即以前该频道发布的消息)缓存

相关API

publish [channel message] --- 向频道channel发布消息message,返回值是订阅者的个数。数据结构

subscribe [channel...] --- 订阅频道(一个或多个)返回对应频道的信息spa

unsubscribe [channel...] --- 取消一个或多个订阅队列

psubscribe [pattern...] --- 按模式订阅,如订阅以什么字母开头的频道。消息队列

punsubscribe [pattern...] --- 退订指定的模式。channel

pubsub channels --- 列出至少有一个订阅者的频道。im

pubsub numsub [channel...] --- 列出给定频道的订阅者数量数据

pubsub numpat [pattern...] --- 列出被订阅模式的数量img

发布订阅与消息队列的区别

发布订阅和消息队列都是生产者消费者模型,它们不一样的是,当消息发布者发布一条消息时,发布订阅的全部订阅者(订阅了该频道的)都会收到对应的消息。而消息队列是一个抢的特色,即只有一个消费者能拿到这条消息。redis中并无提供一个叫消息队列的功能,但咱们能够用list这种数据结构,配合lpush,brpop来实现一个消息队列。

那么如何选择消息队列仍是发布订阅呢?

举例:1.若是咱们须要同时删除全部订阅者的本地缓存,这种场景那就能够使用发布订阅,由于他们都能收到消息,从而执行清除本地缓存 2. 若是是一个抢红包队列,这时候能够用消息队列,只要一个消费者拿到就ok。

相关文章
相关标签/搜索