前言

发布订阅在设计模式中也可以说是观察者模式,针对这个模式是处理对象间一对多的依赖关系的,当一个对象发生变化,其它依赖他的对象都要得到通知并更新。
然而它也有自己的缺点,就是当主题发生一系列的变化时,观察者都要做批量的更新,如果这样的更新成本很高,那么解决方法就是根据种类需求通知,而不能盲目的通知所有的观察者。
那针对这个缺点,一般的情况下,你没有需求谁订阅一个跟自己无关的消息推送呢?这也正好说明推送的消息需要整理而不能一窝蜂的什么消息都往一个通道里面抛,要分而治之,合理的设计发布通道的用途,也合理的订阅通道。
那么如此一来,升级到系统项目级别,他别给我们又带来啦,莫大的好处,便是:剥离系统耦合,减少单线功能的依赖关系,又正迎合啦高内聚,松耦合的系统架构设计。
Redis中的发布/订阅功能
这一节参考官方文档:https://redis.io/topics/pubsub
首先我准备啦1个redis服务,3个客户端,如下图所示:
然后打开官方文档,首先可以看到以下6个命令,对,就只有这6个命令,只要你能掌握理解,发散思维灵活运用。吐纳,吐纳,那么道于此,生一,生二、生三,生万物,根本不在话下!!C,C,C,WC, 小伙,以后拯救世界就看你啦。
下面我们使用这几个命令,做一个演示,便于你理解。
1、2个客户端订阅order.create通道消息,如下:
2、最后一个客户端发布往order.create通道发布消息。如下:
3、你会立马发现订阅此通道的另外2个客户端有信息输出出来,如下:
简单不,一个发布订阅的基础功能以及完事啦。
那如果你对其他一些发布订阅管理系统比较了解的话,你立马会想到一个功能,类似rabbitmq中的topic类型的匹配功能。那redis中有吗,就这6个命令,答案是有的。使用的命令为psubscribe。
127.0.0.1:6379> psubscribe * ---订阅所有通道 127.0.0.1:6379> psubscribe order.* ---订阅通道名称以order.开头的所有通道消息
那又如何取消订阅过的通道呢?
127.0.0.1:6379> unsubscribe order.create ---取消订阅 127.0.0.1:6379> punsubscribe order.* ---取消订阅通道名称以order.开头的所有通道消息
如何查看订阅信息呢?
127.0.0.1:6379> pubsub channels ---查看当前服务器订阅的所有通道 127.0.0.1:6379> pubsub channels order.* ---查看订阅通道名称以order.开头的所有通道 127.0.0.1:6379> pubsub numsub order.create user ---查看订阅order.create 和user 通道的订阅者数量,支持查询多个通道
呀,到此为止,6个命令已经用完啦。就是这么任性,对,你潜心修炼10多分钟已经学会啦redis中最上层的发布订阅技能。你可以出关,打败天下无敌手啦。
StackExchange.Redis实现redis中的发布订阅功能
那这一节呢,我也实在说不出怎么讲更合理点,我就上一个示例,你自己把代码拷贝去,玩玩吧。上代码。
static void Main(string[] args)
{
Console.WriteLine("请输入发布订阅类型?");
var type = Console.ReadLine();
if (type == "publish")
{
while (true)
{
Console.WriteLine("请输入要发布向哪个通道?");
var channel = Console.ReadLine();
Console.WriteLine("请输入要发布的消息内容.");
var message = Console.ReadLine();
sub.Publish(channel, message);
}
}
else
{
Console.WriteLine("请输入您要订阅哪个通道的信息?");
var channelKey = Console.ReadLine();
sub.Subscribe(channelKey, (channel, message) =>
{
Console.WriteLine("接受到发布的内容为:" + message);
});
Console.WriteLine("您订阅的通道为:<< "+ channelKey + " >> ! 一切就绪,等待发布消息!勿动,一动就没啦!!");
Console.ReadKey();
}
}
运行起来几个实例,来玩一玩。如下,5个,1个发布信息,4个订阅信息,其中2个订阅zhanglonghao通道,2个订阅bokeyuan通道。
第一次我发布消息到zhanglonghao通道,发布的消息为:hello shuaige !!如下:
可以看出只有订阅zhanglonghao通道的才接受到啦消息。
那再往bokeyuan通道里面发送,hello bokeyuan !
到此为止,自己玩去吧。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# redis
# 发布订阅
# redis订阅和发布
# redis客户端实现
# redis发布订阅Java代码实现过程解析
# redis发布订阅_动力节点Java学院整理
# redis发布和订阅_动力节点Java学院整理
# Redis 订阅发布_Jedis实现方法
# 浅谈我是如何用redis做实时订阅推送的
# 请输入
# 客户端
# 到此为止
# 自己的
# 分而治之
# 这一节
# 我也
# 吐纳
# 几个
# 我就
# 文档
# 也有
# 你可以
# 无敌手
# 都要
# 多个
# 你会
# 管理系统
# 中有
# 给我们
相关文章:
宝塔新建站点为何无法访问?如何排查?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
css网站制作参考文献有哪些,易聊怎么注册?
建站DNS解析失败?如何正确配置域名服务器?
如何选择网络建站服务器?高效建站必看指南
如何自定义建站之星网站的导航菜单样式?
建站主机如何安装配置?新手必看操作指南
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
为什么Go需要go mod文件_Go go mod文件作用说明
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何快速搭建高效简练网站?
如何用PHP快速搭建CMS系统?
javascript基本数据类型及类型检测常用方法小结
北京制作网站的公司,北京铁路集团官方网站?
如何在阿里云购买域名并搭建网站?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
python的本地网站制作,如何创建本地站点?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
c# 服务器GC和工作站GC的区别和设置
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
魔方云NAT建站如何实现端口转发?
如何快速查询网址的建站时间与历史轨迹?
h5在线制作网站电脑版下载,h5网页制作软件?
如何在建站主机中优化服务器配置?
制作农业网站的软件,比较好的农业网站推荐一下?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
深圳网站制作的公司有哪些,dido官方网站?
如何选择CMS系统实现快速建站与SEO优化?
如何用已有域名快速搭建网站?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
c++怎么用jemalloc c++替换默认内存分配器【性能】
学校为何禁止电信移动建设网站?
网站制作的步骤包括,正确网址格式怎么写?
如何解决ASP生成WAP建站中文乱码问题?
如何在服务器上三步完成建站并提升流量?
建站之星后台管理:高效配置与模板优化提升用户体验
建站之星客服服务时间及联系方式如何?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
开源网站制作软件,开源网站什么意思?
如何高效完成自助建站业务培训?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何生成腾讯云建站专用兑换码?
如何高效配置IIS服务器搭建网站?
建站之星上传入口如何快速找到?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
建站VPS配置与SEO优化指南:关键词排名提升策略
如何快速搭建自助建站会员专属系统?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
*请认真填写需求信息,我们会在24小时内与您取得联系。