首页 > 数据库 >Redis之发布订阅

Redis之发布订阅

时间:2024-06-11 15:45:03浏览次数:21  
标签:订阅 频道 weibo Redis 发布 消息 ...

发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式,发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。

消息发送者&消息接收者&频道

可以想象这么一个场景。我们抖音、微博关注了哪个博主,当他发布一条文章时,系统就会给我们推送他发布的消息内容。
此时,博主=消息发送者,我们用户=消息订阅者,我们关注博主的这个动作=订阅频道。
当然像抖音等这种大型复杂的功能用redis来实现有些吃力,只能说redis可以实现这么一个功能,一般都会用专门的MQ,像rabbitmq、kafka等。

订阅频道

SUBSCRIBE命令:可以让客户端订阅任意数量的频道,每当有新消息发送到被订阅的频道时,信息就会发送给订阅这个频道的所有客户端。
命令格式:SUBSCRIBE [频道1名称] [频道2名称]

消息传送过程

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

当有新消息通过 publish 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

为什么要用发布订阅?

熟悉消息中间件的同学都知道,针对消息订阅发布功能,市面上很多大厂使用的是kafka、RabbitMQ、ActiveMQ, RocketMQ等这几种。
redis的订阅发布功能跟这三者相比,相对轻量,针对数据准确和安全性要求没有那么高可以直接使用,适用于小公司。

redis 的List数据类型结构提供了 blpop 、brpop 命令结合 rpush、lpush 命令可以实现消息队列机制,基于双端链表实现的发布与订阅功能

  • 双端队列图解

双端队列模式只能有一个或多个消费者轮着去消费,却不能将消息同时发给其他消费者

  • 发布/订阅模式图解

redis订阅发布模式,生产者生产完消息通过频道分发消息,给订阅了该频道的所有消费

发布/订阅如何使用?

Redis有两种发布/订阅模式

  • 基于频道(Channel)的发布/订阅
  • 基于模式(pattern)的发布/订阅
序号 命令 描述
1 subscribe channel [channel ... ] 订阅给定的一个或多个频道
2 unsubscribe  channel  [channel ... ] 退订给定的频道,说明:若没有指定channel,则默认退订所有频道
3 publish channel message 将消息发送给指定频道 channel,返回结果:接收到信息的订阅者数量,无订阅者返回0
4 pubsub channels [argument  [atgument ...] ] 查看订阅与发布系统的状态,说明:返回活跃频道列表(即至少有一个订阅者的频道,订阅模式的客户端除外)
5 psubscribe pattern1  [pattern...] 订阅一个或多个符合给定模式的频道,说明:每个模式以 * 作为匹配符;例如 cn* 匹配所有以cn开头的频道:cn.java、cn.csdn
6 punsubscribe [pattern [pattern ...] ] 退订所有给定模式的频道,说明:pattern 未指定,则订阅的所有模式都会被退订,否则只退订指定的订阅的模式

案例

  • 开启一个终端,订阅一个频道(订阅端)
127.0.0.1:6379> SUBSCRIBE weibo                     #订阅一个频道,频道的名字weibo
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "weibo"
3) (integer) 1                                      #等待读取推送的信息
  • 另起一个终端发送消息(发送端)
127.0.0.1:6379> PUBLISH weibo "hello weibo"         #发布者发送消息到频道
(integer) 1
127.0.0.1:6379> PUBLISH weibo "hello redis"
(integer) 1
127.0.0.1:6379>

  • 第一个终端收到消息
127.0.0.1:6379> SUBSCRIBE weibo
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "weibo"
3) (integer) 1
1) "message"                                       #消息
2) "weibo"                                         #来自哪个频道
3) "hello weibo"                                   #消息的内容
1) "message"
2) "weibo"
3) "hello redis"

参考

https://blog.csdn.net/w15558056319/article/details/121490953
https://blog.csdn.net/yi_qingjun/article/details/128172464

标签:订阅,频道,weibo,Redis,发布,消息,...
From: https://www.cnblogs.com/OpenSourceSite/p/18241813

相关文章

  • 【建议收藏】阿里巴巴1688如何打造7星产品,发布技巧
    很多1688新手在问怎么打造7星产品,阿里1688七星产品对店铺的权重有加持作用,刚出来我也觉得很难打造7星产品,经过研究发现只有掌握到技巧,7星,真是很简单!今天对小白商友来说,7个发布优化技巧,建议收藏。一、选对类目很重要类目的选择是商品发布非常重要的一步在影响该商品权重的因素......
  • 百度面试:如何用Redis实现限流?
    高并发系统有三大特征:限流、缓存和熔断,所以限流已经成为当下系统开发中必备的功能了。那么,什么是限流?如何实现限流?使用Redis能不能实现限流?接下来我们一起来看。1.什么是限流?限流是指在各种应用场景中,通过技术和策略手段对数据流量、请求频率或资源消耗进行有计划的限制,以避......
  • DBAPI 数据接口发布平台功能介绍
    书接上文:一、登录  admin/admin 二、功能介绍1.数据源 这里用mysql数据源展示效果 2.API(4.0.10版本这里有个BUG,就是默认不显示API,点搜索才能出来,希望官网后续可以改进~)API这里给个三个配置模块,基本信息和执行器是必须要填写的。这里的访问权限有私有API和开放......
  • DBAPI 安装部署standalone 数据API接口发布平台
    DBAPI项目地址:https://gitee.com/freakchicken/db-api项目简介:零代码开发api服务,只需编写sql,就可以生成httpapi服务。支持api动态创建,兼容多种数据库。适用于BI报表、数据可视化大屏的后端接口快速开发。旨在为企业数据服务的发布提供完整解决方案一、下载安装包 在浏览......
  • Python项目打包二进制文件并发布
    复制项目生成二进制文件(交叉编译???)重命名二进制文件生成pyi文件(编译器智能提示需要删除原始py文件(复制后的)项目打包上传(分版本分平台???)流程、代码待完善二进制文件生成pipinstallcpython#setup.pydeffind_pyx_files(directory):pyx_files=[]forroot,_......
  • redis自学(46)键值设计
    Redis键值设计优雅的key结构Redis的Key虽然可以自定义,到但是最好遵循下面的几个最佳实践约定:l 遵循基本格式:[业务名称]:[数据名]:[id]l 长度不超过44字节(长度越小,占用的内存越少)l 不包含特殊字符  优点:①可读性强②避免key冲突③方便管理④更节省内存:ke......
  • pytqt5及python下程序打包发布
    关于写的软件如何打包发布,总结一下找到的方式,方便后期使用。首先,你需要安装pyinstaller。pipinstallpyinstaller如果你打包的文件想要是多个文件,这样打包后的文件是在你输入路径下的文件,包含多个数据,你需要exe文件在dist文件夹下pyinstaller--name="key_gongdan""......
  • 爆肝三天,制作属于自己的地图——DAY2(地图数据发布)
    爆肝第二天,地图数据发布作者:御剑飞行在第一篇中,我们对开源的地图数据集作了介绍爆肝三天,制作属于自己的地图——DAY1(地图数据整理)大家是不是非常想把以上数据集发布呢?市面上有很多种支持地图数据集发布的平台,但是,像MapmostStudio功能这么全的,还没有呢。MapmostStudio......
  • Redis面试题、知识点总结,一篇文章让Redis成为面试加分项
    Redis面试题、知识点总结,一篇文章让Redis成为面试加分项前言参与了几次中大厂的面试,你会发现一面时对于八股文的考察也具有侧重点(MySQL=Redis>网络>系统>设计模式>java集合>JVM>spring)本文的目标就是通过这一篇文章让你能在面试时将Redis相关的问题回答漂亮。......
  • Vue3 运行可以,build 打包发布报错
    Vue多环境配置https://www.cnblogs.com/vipsoft/p/16696640.htmlconfig.jsconstconfig={title:'管理系统(开发)',//开发、测试apiUrl:'http://www.vipsoft.com.cn',version:'v1.0.1'}exportdefaultconfigmain.jsimportconfigfrom......