Redis总结之发布订阅

时间:2022-07-24
本文章向大家介绍Redis总结之发布订阅,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

绪论

  • 理论知识 先介绍一下发布与订阅的基础知识: Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 发布者不是直接将消息发送给特定的接收者(订阅者),而是将发布的消息分到不同的频道,不需要知道什么样的订阅者订阅。 订阅者支持订阅一个或多个频道,只需接收感兴趣的消息,不需要知道是由哪些发布者发布的。 发布者和订阅者相对于频道channel而言,均可以理解为客户端。 客户端发到频道的消息,将会被推送到所有订阅此频道的客户端。 客户端不需要主动去获取消息,只需要订阅频道,这个频道的内容就会被推送过来。 Redis 客户端可以订阅任意数量的频道。
  • 发布订阅命令

命令

说明

参数

返回

PSUBSCRIBE pattern [pattern1 …]

订阅一个或多个符合给定模式的频道,每个模式以*作为匹配符

pattern(给定的模式)

接受到的信息

PUNSUBSCRIBE pattern [pattern1 …]

用于退订所有给定模式的频道

pattern(给定的模式)

这个命令在不同的客户端中有不同的表现。

SUBSCRIBE channel [channel1 …]

用于订阅给定的一个或多个频道的信息

channel(给定的频道名)

接收到的信息

UNSUBSCRIBE channel [channel1 …]

用于退订给定的一个或多个频道的信息

channel(给定的频道名)

这个命令在不同的客户端中有不同的表现

PUBLISH channel message

用于将信息发送到指定的频道

channel(频道名称),message(将要发送的信息)

接收到此消息的订阅者数量

实践

这一部分将演示小编实际操作的发布订阅模式。 1.先开启订阅者客户端

小编这里选择订阅redisChannelOneredisChannelTwo两个频道
127.0.0.1:6379> SUBSCRIBE redisChannelOne redisChannelTwo
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChannelOne"
3) (integer) 1
1) "subscribe"
2) "redisChannelTwo"
3) (integer) 2

2.开启发布者客户端

发布者向redisChannelOne频道推送消息
127.0.0.1:6379> PUBLISH redisChannelOne "from channelOne message"
(integer) 1
127.0.0.1:6379> 

订阅者接受到消息如图:

3.发布者继续往频道redisChannelTwo推送消息

127.0.0.1:6379> PUBLISH redisChannelOne "from channelOne message"
(integer) 1
往频道redisChannelTwo推送消息
127.0.0.1:6379> PUBLISH redisChannelTwo "redisChannelTwo send message"
(integer) 1

订阅者端消息内容如下:

缺点

实践环节,大家注意到小编是先开启的订阅者客户端,有兴趣的伙伴可以实践一下如果先开启发布者客户端发布消息,订阅者是否能够收到消息,因此引出小编下面的内容: 即使redis实现了发布订阅(publish/subscribe)的功能,实际工作开发中不推荐使用。 最简单的例子就是上面所说的场景,如果订阅者客户端重启或者断线,那么它重启期间的消息则无法订阅到,导致接受消息失败。

参考资料:Redis发布与订阅