redis的发布订阅

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

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

相关API

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

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

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

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

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

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

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

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

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

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

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

举例:1.如果我们需要同时删除所有订阅者的本地缓存,这种场景那就可以使用发布订阅,因为他们都能收到消息,从而执行清除本地缓存 2. 如果是一个抢红包队列,这时候可以用消息队列,只要一个消费者拿到就ok。

猜你喜欢

转载自my.oschina.net/u/3371837/blog/1787449