发布订阅
角色:
- 发布者(publisher)
- 订阅者(subscriber)
- 频道(channel)
模型
发布订阅:发布一条消息,所有的订阅者都可以收到消息
当然,每一个订阅者是可以订阅多个频道的(如下图),现在Redis里有两个频道,有的订阅者订阅了一个频道,有的订阅了两个频道。当消息发送的时候,就可以收到不同频道发送的消息。不关注的频道收不到。但是有这样一个问题,假如说,发布者现在发布了一个消息到一个频道了,一个新的订阅者订阅了,他是收不到之前的消息的。
publish(发布命令)
publish channel message 用于将信息发送到指定的频道(返回订阅数)
subscribe(订阅)
subscribe [channel] 用于订阅给定的一个或多个频道的信息
unsubscribe(取消订阅)
unsubscribe[channel] 用于退订给定的一个或多个频道的信息
其他API
消息队列
与发布订阅的区别:发布订阅发布一条消息后,所以的订阅者都可以收到消息。对于消息队列来说,他是一个抢的功能。发送一条Hello只有一个消息订阅者可以收到,因为他是一个抢的功能。而且Redis也没有提供这样的功能(就是说有一个东西叫做消息队列),而是说使用list来实现,使用阻塞的这样去拉的这样一个功能,大家去抢这个东西。
注:当你开发使用这样的模型的时候,首先要考虑到是一个订阅者收到,还是都收到(要根据不同的场景来决定)。例如现在需要将所有的订阅者的本地缓存都清空,那么就需要使用发布订阅模式