Redis订阅&发布使用详解

245 阅读3分钟

这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战

hello,你好呀,我是灰小猿,一个超会写bug的程序猿!

今天我们来讲一下Redis订阅与发布的实现,通过Redis的订阅和发布,你将会更深一步的认识到Redis在实际使用中的优势所在。

Redis订阅发布原理

基于“订阅/发布”的场景在我们的生活中并不少见,例如我们常见的微信公众号订阅号,当你订阅关注了我的公众号之后,我们之间就建立了一层关联,当我发布新的内容的时候,你就可以实时的收到消息,这就是非常典型的订阅/发布案例。

而Redis的订阅和发布与此类似:订阅者订阅发布者的消息,当发布者发布新的消息的时候,订阅者就可以收到该消息,

如下图所示,我们让三个client去订阅一个channel,

当有新消息通过PUBLISH命令,发布到channel频道时,所有订阅该频道的订阅者就可以看到该消息。

在Redis中常用的订阅发布的命令有如下几个:

  • PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道
  • PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态
  • PUBLISH channel message 将信息发布到指定的频道
  • PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道
  • SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息
  • UNSUBSCRIBE [channel [channel ...]] 退订指定的频道

订阅/发布实例操作

接下来我们通过一个实例来验证一下Redis中的订阅与发布实例。

订阅端:

首先,我们需要在订阅端订阅频道,比如我们订阅名为huixiaoyuan的这个频道。通过命令订阅之后,它就处于了一个等待响应的状态。

127.0.0.1:6379> SUBSCRIBE huixiaoyuan
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "huixiaoyuan"
3) (integer) 1
# 等待读取推送的消息
1) "message"  #消息
2) "huixiaoyuan"  #频道的名称
3) "hello hxy"    #消息内容

发送端:

这个时候我们另外开启一个窗口,使用PUBLISH命令向指定频道中发送一条新消息。命令操作如下:

127.0.0.1:6379> PUBLISH huixiaoyuan "hello hxy"
(integer) 1

这个时候,我们就可以在上面订阅端的窗口上实时的收到消息了,操作起来是不是很简单?

Redis订阅发布的使用场景分析

上面我们介绍了redis是如何实现订阅与发布的,对于这样的使用又有哪些实际的使用场景呢?首先,基于订阅和发布的业务场景可以用于消息系统、群聊天室等应用,我们可以将频道作为一个聊天室来应用,多个订阅者订阅频道之后,发布者向频道中发布消息,订阅者就可以收到消息了。

其次,这样一对多的消息系统,还可以用于类似于抖音、B站、微信公众号这样的关注系统,可以将媒体平台作为一个频道,被关注者只需要向频道中发布消息,关注者就可以收到对应消息,

以上就是Redis订阅与发布的使用教程与使用场景,

我是灰小猿,我们下期见!