技术饭

Redis的消息发布(Pub)与订阅(Sub)

copylian    0 评论    13847 浏览    2023.05.01

Redis的消息发布(Pub)与订阅(Sub),Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 channel。在 Redis 中,一个客户端可以订阅任意数量的 channel(可译为频道)。消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的一种解耦方式。

原理:

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

        pub -> publisher

        sub -> subscriber

Redis客户端订阅一个频道非常简单,它可以订阅任意数量的频道

1513542551-0.gif

如下图,Redis客户端订阅(subscriber)频道(channel)

f38790a25a977ee3da98b1fcc2d5bd06.png

如下图,当消息发送到客户端订阅的频道(channel)时,这个消息就会被订阅的所有未故障的客户端接接收到

52481eb856f0f65d8c266bf241d3a43a.png

关于Redis的Pub/Sub为什么被抛弃,最主要的原因是它无法持久化,没有实现持久化机制的Pub/Sub,无法做到消息的不丢失,在客户端宕机或者Redis服务宕机的情况下,都会导致消息丢失。

1)、客户端宕机,客户端无法接收消息

2)、Redis服务宕机,没有客户端能连接上,肯定也无法接收到消息

大部分情况下,我们都不会用到Redis去做消息中间件,市面上成熟且好用的消息中间件非常多,如果真的需要使用Redis来做消息中间件,可以考虑Redis 5.0的新数据结构Stream,这个功能在Pub/Sub的基础上,实现了持久化机制,并且大力借鉴了kafka的设计原理,完善了Redis用于实现消息队列的不足之处。


redis基础命令:

PSUBSCRIBE pattern [pattern ...]    订阅一个或多个符合指定模式的频道,如:PSUBSCRIBE www.*

SUBSCRIBE channel [channel ...]    订阅一个或者多个频道的消息,如:SUBSCRIBE www.copylian.com

PUBSUB subcommand [argument [argument ...]]    查看发布/订阅系统状态,可选参数:channels 返回在线状态的频道、numpat 返回指定模式的订阅者数量、numsub 返回指定频道的订阅者数量。    

PUBLISH subcommand [argument [argument ...]]    将信息发送到指定的频道,如:PUBLISH www.*

PUNSUBSCRIBE [pattern [pattern ...]]    退订所有指定模式的频道,如:PUNSUBSCRIBE www.*

UNSUBSCRIBE [channel [channel ...]]    退订指定的频道,如:UNSUBSCRIBE www.copylian.com


图示:两个客户端Sub订阅之后处于监听状态,一个客户端发布消息,其他两个客户端就能收到消息

微信图片_20230501173759.png

参考:

Redis精通系列——Pub/Sub(发布订阅):https://blog.csdn.net/qq_41125219/article/details/120299819

Redis PubSub发布订阅(详细图解):http://c.biancheng.net/redis/pubsub.html


只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
redis pub sub 发布 订阅 

文明上网理性发言!

  • 还没有评论,沙发等你来抢