iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >redis发布订阅_动力节点Java学院整理
  • 700
分享到

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

节点动力学院 2022-06-04 17:06:21 700人浏览 泡泡鱼
摘要

其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,除了这个场景还能找到

其实在很多的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这个源代码文件,差不多都会懂得

您可能感兴趣的文档:

--结束END--

本文标题: redis发布订阅_动力节点Java学院整理

本文链接: https://www.lsjlt.com/news/11816.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis发布订阅_动力节点Java学院整理
    其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,除了这个场景还能找到...
    99+
    2022-06-04
    节点 动力 学院
  • redis发布和订阅_动力节点Java学院整理
    Redis 的 pub sub实现了邮件系统,发送者(在 Redis 术语中被称为发布者)发送的邮件,而接收器(用户)接收它们。由该消息传送的链路被称为信道。 Redis客户端可以订阅任何数目的通道。 ...
    99+
    2022-06-04
    节点 动力 学院
  • redis简介_动力节点Java学院整理
    Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案。Redis官方网网站是:http://www.redis.io/,如下: Redis 有三个...
    99+
    2022-06-04
    节点 动力 简介
  • redis事务_动力节点Java学院整理
    我们都知道redis追求的是简单,快速,高效,在这种情况下也就拒绝了支持window平台,学sqlserver的时候,我们知道事务还算是个比较复杂的东西,所以这要是照搬到redis中去,理所当然redis就...
    99+
    2022-06-04
    节点 事务 动力
  • redis哈希类型_动力节点Java学院整理
    redis中的hash也是我们使用中的高频数据结构,它的构造基本上和编程语言中的HashTable,Dictionary大同小异,如果大家往后有什么逻辑需要用Dictionary存放的话,可以根据场景优先考...
    99+
    2022-06-04
    节点 类型 动力
  • redis集合类型_动力节点Java学院整理
    我们来看看Redis五大类型中的第四大类型:“集合类型”,集合类型还是蛮有意思的,先看redis手册,如下: 上面就是redis中的set类型使用到的所有方法,还是老话,常用的方法也就那么四个(CURD)...
    99+
    2022-06-04
    节点 类型 动力
  • redis列表类型_动力节点Java学院整理
    据说60%的人使用redis看重的是redis中的list类型,那这个list有什么用呢???不用我说大家都明白,做队列使用呗,为什么用它呢,很简单呗,因为有了它我就不需要专门的MQ产品啦,比如说Rabbi...
    99+
    2022-06-04
    节点 类型 动力
  • redis快照模式_动力节点Java学院整理
    我们知道redis是带有持久化这个能力了,那到底持久化成到哪里,持久化成啥样呢???这篇我们一起来寻求答案。 一、快照模式   或许在用Redis之初的时候,就听说过redis有两种持久化模式,第一种是SN...
    99+
    2022-06-04
    快照 节点 模式
  • redis集群搭建_动力节点Java学院整理
    现在项目上用redis的话,很少说不用集群的情况,毕竟如果生产上只有一台redis会有极大的风险,比如机器挂掉,或者内存爆掉,就比如我们生产环境曾今也遭遇到这种情况,导致redis内存不够挂掉的情况,当然这...
    99+
    2022-06-04
    节点 集群 动力
  • Redis入门教程_动力节点Java学院整理
    Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。 一:Redis是什么?   这个我想怎么总结呢,...
    99+
    2022-06-04
    节点 入门教程 动力
  • redis数据类型_动力节点Java学院整理
    Redis支持5种数据类型,它们描述如下: Strings - 字符串 Redis的字符串是字节序列。在Redis中字符串是二进制安全的,这意味着他们有一个已知的长度,是没有任何特殊字符终止决定的,所以可...
    99+
    2022-06-04
    节点 数据类型 动力
  • myeclipse开发servlet_动力节点Java学院整理
      在web.xml中可以对同一个Servlet配置多个对外访问路径,并如果在web.xml中配置的信息服务器会自动加载部署,而如果是在Servlet中进行程序代码的修改,则每次都要重新部署。  首先,在使用MyEclipse创建Servl...
    99+
    2023-05-31
    myeclipse servlet ava
  • redis哈希和集合_动力节点Java学院整理
    Redis的哈希值是字符串字段和字符串值之间的映射,所以他们是表示对象的完美数据类型在Redis中的哈希值,可存储超过400十亿键值对。 例子 redis 127.0.0.1:6379> HM...
    99+
    2022-06-04
    节点 动力 学院
  • redis安装和配置_动力节点Java学院整理
    在Ubuntu上安装Redis 要安装Redis在Ubuntu上,打开终端,然后键入以下命令: $sudo apt-get update $sudo apt-get install redis-se...
    99+
    2022-06-04
    节点 动力 学院
  • redis字符串类型_动力节点Java学院整理
    我们都知道redis是采用C语言开发,那么在C语言中表示string都是采用char[]数组的,然后你可能会想,那还不简单,当我执行如下命令,肯定是直接塞给char[]数组的。 如果你真的这么想的话,会有...
    99+
    2022-06-04
    节点 字符串 类型
  • redis与memcached的区别_动力节点Java学院整理
    传统MySQL+ Memcached架构遇到的问题   实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的...
    99+
    2022-06-04
    节点 区别 动力
  • Java多态(动力节点Java学院整理)
    什么是多态 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象...
    99+
    2023-05-31
    java 多态 ava
  • Java死锁_动力节点Java学院整理
    死锁是两个甚至多个线程被永久阻塞时的一种运行局面,这种局面的生成伴随着至少两个线程和两个或者多个资源。在这里我已写好一个简单的程序,它将会引起死锁方案然后我们就会明白如何分析它。Java死锁范例ThreadDeadlock.javapack...
    99+
    2023-05-31
    java 死锁 ava
  • JDBC简介_动力节点Java学院整理
    前言:什么是JDBC维基百科的简介:  Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。J...
    99+
    2023-05-31
    jdbc 简介 ava
  • Ehcache简介_动力节点Java学院整理
    使用Spring的AOP进行整合,可以灵活的对方法的返回结果对象进行缓存。CachingFilter功能可以对HTTP响应的内容进行缓存。1、主要特性     1. 快速.  &n...
    99+
    2023-05-31
    ehcache ava hcache
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作