阅读目录

  1. 发布订阅模型
  2. Redis中的发布订阅
  3. 客户端编程示例
  4. 0.3版本Hredis

发布订阅模型

在应用级其作用是为了减少依赖关系,通常也叫观察者模式。主要是把耦合点单独抽离出来作为第三方,隔离易变化的发送方和接收方。

发送方:只负责向第三方发送消息。(杂志社把读者杂志交给邮局)
接收方:被动接收消息。(1:向邮局订阅读者杂志,2:门口去接邮过来的杂志)
第三方作用是:存储订阅杂志的接收方,并在杂志过来时送给接收方。 (邮局)

C#示例,发送方把杂志放到邮局里面:

    if (QA.AddBug())
EmailNotify();
接收方到邮局登记地址,有杂志过来时送货上门:
    EmailNotify += () => { Console.WriteLine("A君"); };
EmailNotify += () => { Console.WriteLine("B君"); };

第三方邮局接受读者杂志订阅,收到杂志时进行派送:

    public delegate void MessageHandler();
public static event MessageHandler EmailNotify; if (QA.AddBug())
EmailNotify();

当我们把观察者模式放大到系统级时,就是发布订阅(pub/sub)了。 主要是用来降低发布者和订阅者的耦合,提高前端系统吞吐量。结构如图:

Redis中的发布订阅

Redis实现完整的发布订阅范式,就是说任何一台redis服务器,启动后都可以当做发布订阅服务器。

普通订阅

启动订阅者client。

redis-cli.exe -h 127.0.0.1 -p 

订阅bar频道。格式:SUBSCRIBE name1 name2。
成功订阅回复,分别对应订阅类型、订阅频道、订阅数量。

127.0.0.1:> SUBSCRIBE bar
Reading messages... (press Ctrl-C to quit)
) "subscribe"
) "bar"
) (integer)

新起个发布者client,发送消息。格式:publish channelName Message。

127.0.0.1:> publish bar val
(integer)

订阅client回复,分别对应消息类型,频道,消息。

) "message"
) "bar"
) "val"

图例

模式订阅

Redis支持模式匹配订阅,*为模糊匹配符。
订阅所有频道的消息

PSUBSCRIBE *  

订阅以news.开头的所有频道。

PSUBSCRIBE news.*

取消订阅

取消普通订阅和取消模式订阅的命令。

UNSUBSCRIBE  bar
PUNSUBSCRIBE ba*

取消在官方提供的连接工具中无法模拟的。

查看订阅信息

查看订阅消息是redis在2.8中心增加的命令之一。

pubsub channels [pattern] 。

返回当前服务器被订阅的所有频道。

127.0.0.1:> pubsub channels
) "bar"

指定匹配参数,返回与模式匹配的所有频道。

127.0.0.1:> pubsub channels ba*
) "bar"

pubsub numsub [channel-1 channel-2 ...channel-n]

接受任意多个频道作为输入参数,返回这些频道的订阅者数量。

127.0.0.1:> pubsub numsub  bar bar2
) "bar"
) (integer)
) "bar2"
) (integer)

客户端编程示例

            RedisPubSub client = new RedisPubSub("127.0.0.1", );
client.OnUnSubscribe += (obj) => {
Console.WriteLine();
};
client.OnMessage = (sender, arcgs) =>{
Console.WriteLine(arcgs);
};
client.OnError = (Exception) => {
Console.WriteLine(Exception.Message);
};
client.Subscribe("bar"); Console.ReadLine();

0.3版本HRedis

基本使用

    using (RedisClient client = new RedisClient("127.0.0.1", ))
{
client.Set("key", "value");
client.Get("key");
}

使用连接池,自动回收连接。

        PoolRedisClient prc = new PoolRedisClient(new PoolConfiguration());

        prc.Single.Set("key", "value");

        prc.Single.Get("key");

及上面的订阅。

开源地址 https://github.com/mushroomsir/HRedis

Redis系列(三)-Redis发布订阅及客户端编程的更多相关文章

  1. ActiveMQ入门系列三:发布/订阅模式

    在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...

  2. rabbitmq系列三 之发布/订阅

    1.发布/订阅 在上篇教程中,我们搭建了一个工作队列,每个任务只分发给一个工作者(worker).在本篇教程中,我们要做的跟之前完全不一样 —— 分发一个消息给多个消费者(consumers).这种模 ...

  3. Redis系列三 Redis数据类型

    一 .Redis的五大数据类型 1.String(字符串) string是redis最基本的数据类型,可以理解成与 Memached一模一样的数据类型,一个key对应一个value. string 类 ...

  4. 第三百零一节,python操作redis缓存-管道、发布订阅

    python操作redis缓存-管道.发布订阅 一.管道 redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pi ...

  5. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  6. Redis系列之----Redis的数据类型及使用场景

       Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,能够提供多种不同的键值数据类型来适应不同场景下的缓存和存储需求.    Redis中所有的数据都存储在内存中,因此读写速度非常快,相 ...

  7. Redis系列(一):Redis的简介与安装

    原文链接(转载请注明出处):Redis系列(一):Redis的简介与安装 什么是 Redis Redis 是一个使用ANSI C 编写的开源.支持网络协议.基于内存.可选持久性的键值对数据库,它是一个 ...

  8. Redis系列一 Redis安装

    Redis系列一    Redis安装 1.安装所使用的操作系统为Ubuntu16.04 Redis版本为3.2.9 软件一般下载存放目录为/opt,以下命令操作目录均为/opt root@ubunt ...

  9. Redis系列(八):发布与订阅

    Redis的发布与订阅,有点类似于消息队列,发送者往频道发送消息,频道的订阅者接收消息. 1. 发布与订阅示例 首先,在本机开启第1个Redis客户端,执行如下命令订阅blog.redis频道: SU ...

随机推荐

  1. 【leetcode】Remove Duplicates from Sorted List

    题目简述 Given a sorted linked list, delete all duplicates such that each element appear only once. For ...

  2. python-opencv笔记 图像的读取和简单几何图形绘制

  3. 用 IIS 实现请求转发

    最近部门要开发一个简单的APP,部分数据是现有项目已经存在的,为了方便维护,希望只提供一个交互的入口,并且协议的规则不变. 基于这个需求,有两套解决方案: 1.用代码将现有的api封装一层,对请求数据 ...

  4. CharacterEncodingFilter-Spring字符编码过滤器

    通过源码可以看到在web.xml配置CharacterEncodingFilter 时,可以配置两个参数:encoding和forceEncoding : encoding:编码格式: forceEn ...

  5. 转载:安装ie driver和chrome driver

    很多同学在使用webdriver的时候总是忘了安装ie driver和chrome driver, 因此在这里简单介绍一下这2个driver的安装方式. IE driver 在新版本的webdrive ...

  6. R语言绘制空间热力图

    先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...

  7. Struts相关

    使用Struts2流程: 1.导入Struts2类包 2.在Web源代码文件夹中,创建名为struts.xml的配置文件.在其中定义Action对象,其关键代码如下: struts.xml: < ...

  8. Nodejs windows的安装

    0.下载地址: http://nodejs-org.qiniudn.com/ https://nodejs.org/download/ https://nodejs.org/en/ 1.基本就是一路N ...

  9. css 浅析display属性

    继续开始我的css之旅吧.今天我们来说什么啊.构思了两天还是没有什么思路,但是学习的步伐我们不能停止下来.还是按照之前的计划来讲讲display,在讲这个之前我们还是按照老规矩来扯扯蛋,步子不能够迈大 ...

  10. BZOJ4455: [Zjoi2016]小星星

    Description 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细 线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这 ...