爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!
当前所在位置:主页 > 数据库 > Redis >
  • 魔艺客提供SEO\SEM推广整合营销服务
  • 提供整套互联网营销整合方案-魔艺客
  • 魔艺客高端网站建设开发服务十一大优惠服务
  • 资深的网站建设开发经验,一对一服务-魔艺客高
  • 一站式服务,从服务器到网站,三站何以尽在魔
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

redis发布订阅_动力节点Java学院整理

发布时间:2017-09-14 09:47    作者:爱开发联盟    浏览:次    来源:aikaifa.com.cn 分享:

其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,除了这个场景还能找到其他场景么,当然有啦,你想想,如果你要在内存里面做一个读写分离的程序,为了维持数据的完整性,你是不是需要保证在写入的时候,也要分发到各个读内存的程序中呢?所以说场景还是很多的,在于你的挖掘~~~ 下面还是从基本命令入手:

一:命令简介

从redis手册上面可以看到,其实“发布、订阅”模式才区区6个命令,下面听我一一解说下哈~~~

1. subscribe

SUBSCRIBE channel [channel ...]

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

从上面的官方解释上来看,它的玩法有一点像现实生活中我们听收音机一个道理,要想听收音机,我们要做什么?肯定就是调频啦,只有在正确的频道上面,我们才能听得到好听的节目,所以说subscribe首先要订阅一个频道(channel),下面我举个例子,开两个client,分别订阅着msg 这个频道,比如下面这样:

2.publish  

到现在为止,这两个subscibe都在监视着msg这个频道,接下来,如果msg频道有消息传出,必定会被subscribe接收到,先我们还是看看redis手册上怎么用这个命令。

PUBLISH channel message

将信息 message 发送到指定的频道 channel 。

看到上面命令的用法,我也就放心了。

看到么有,publish在msg这个频道上面发送消息后,被subscribe监视到了,然后就被分别打印输出了,好了,到现在为止,最基本的发布订阅模式就是这样,是不是很简单哈。。。其实呢??? 也就是这么简单呐,但是呢,有时候我们还有这样一个需求,就是我能不能模糊匹配key呢???举了例子,就是要求订阅china为前缀的所有频道,如果这样也可以做到的话,那确实是很牛啦。。。强大的redis自然会做到这一点,它提供了的命令就是:Psubscribe。

3. Psubscribe

PSUBSCRIBE pattern [pattern ...]

订阅一个或多个符合给定模式的频道。

每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类。

看到上面的解释,你心里可能就在想,这不就是正则匹配么。。。而且前缀“P”就是Pattern的意思,对吧,接下来我就订阅一下所有china为前缀的channel。

好了,最常用的也就是这三个命令,接下来我们简单分析一下代码。

二: 源码简单分析

其实redis的发布订阅模式,使用RedisServer下面的 pubsub_channels字典 和 pubsub_patterns数组存放的,所有的操作代码都

在pubsub.c文件下,如下图:

1.   pubsub_channels 

可以看到,它是一个字典结构,通过注释你应该明白,它的key为channel,value为list。

2.   pubsub_patterns

同样从注释中,你可以看到,其实它就是存放模式匹配的subscribe的clients列表,对吧,用一个list数组实现。 

3.   subcribeCommand

通过下面的代码,你是不是在脑子里面很有轮廓了???其实这个pubsub_channels果然就是key=channel,value=list的存放模式,这个list就是所谓的clients列表,这样的话,你就知道了哪些key挂了哪些clients,对吧,如果再publish的话,只需要遍历一下这个list就知道结果了。

4.  publishCommand

先前也说了,publish的原理很简单,就是找到字典中的channel这个key,获取到clients之后,遍历client的来发送信息。

同样的道理,pubsub_patterns也是差不多的实现,只要大家简单看一下pubsub.c这个源代码文件,差不多都会懂得

网友评论

分类排行榜联系我们

好文推荐联系我们

爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

当前最新内容联系我们

爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

在线手册

网站地图导航

前端 HTML/Xhtml HTML5 CSS XML/XSLT Dreamweaver教程 Frontpage教程 心得技巧 编程 JavaScript ASP.NET PHP编程 正则表达式 AJAX相关 ASP编程 JSP编程 Flex 脚本加解密 web2.0 XML/RSS 网页编辑器 相关技巧 安全相关 网页播放器 Dart 其它综合 脚本 VBS DOS/BAT HTA HTC Python perl 游戏相关 vba 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 脚本下载 广告代码 js框架 批处理 网页相关 源码下载 数据库 MsSql Mysql mariadb oracle DB2 mssql2008 mssql2005 SQLite PostgreSQL MongoDB Redis Access 数据库文摘 数据库其它 CMS dedecms ecshop z-blog UcHome UCenter 风讯CMS 科汛cms discuz 新云cms phpwind 动易cms phpcms 帝国cms WordPress drupal 其它cms 设计 photoshop教程 摄影教程 Fireworks教程 CorelDraw教程 Illustrator教程 Painter教程 Freehand教程 Indesign 设计素材 平面其它 微信相关 微信公众号 小程序 操作系统 bios 系统安装 系统进程 Windows系列 LINUX RedHat/Centos Ubuntu/Debian Fedora Solaris 麒麟系统 红旗Linux Unix/BSD 苹果MAC 注册表 其它系统 网站运营 建站经验 微信营销 网站优化 网站策划 网络赚钱 网络创业 站长故事 alexa域名 其它相关 网络安全 黑客教程 安全设置 杀毒防毒 病毒查杀 脚本攻防 黑客入侵 工具使用 业界动态 Exploit 漏洞分析 加密解密 手机黑客 安全其它 在线手册 网页制作 脚本编程 数据库相关 软件编程 系统相关 其它相关 源码下载

友情链接申请加入

51CTO 上海魔艺客 猫鼬设计开发 Erlo网站开发 猫鼬设计工作室 新发现全球资讯 信息安全与IT资讯
爱开发联盟是国内专业的网站建设资源、脚本编程学习类网站,提供asp、php、asp.net、javascript、jquery、vbscript、dos批处理、网页制作、网络编程、网站建设等编程资料。让开发变得简单起来!

283882409