Redis系列(三)-Redis发布订阅及客户端编程

阅读目录

  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 6379

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

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

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

127.0.0.1:6379> publish bar val
(integer) 1

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

1) "message"
2) "bar"
3) "val"

图例

模式订阅

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

PSUBSCRIBE *  

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

PSUBSCRIBE news.*

取消订阅

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

UNSUBSCRIBE  bar
PUNSUBSCRIBE  ba*

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

查看订阅信息

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

pubsub channels [pattern] 。

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

127.0.0.1:6379> pubsub channels
1) "bar"

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

127.0.0.1:6379> pubsub channels ba*
1) "bar"

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

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

127.0.0.1:6379> pubsub numsub  bar bar2
1) "bar"
2) (integer) 1
3) "bar2"
4) (integer) 0

客户端编程示例

            RedisPubSub client = new RedisPubSub("127.0.0.1", 6381);
            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", 6381))
        {
            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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据

Kafka详细的设计和生态系统

Kafka 的核心是经纪人,主题,日志,分区和集群。核心也包括像 MirrorMaker 这样的相关工具。前面提到的是 Kafka,因为它存在于 Apache ...

1.1K10
来自专栏大宽宽的碎碎念

实现一个靠谱的Web认证两种认证JWT怎么存储认证信息防止CSRF总是使用https认证信息不应该永久有效总结一下

565100
来自专栏飞雪无情的博客

Go语言IDE GoLand激活最新版

今天写Go语言相关的小程序的时候,发现我的go语言IDE有点旧了,2016版本的,就打算升级一下。

18.2K10
来自专栏逸鹏说道

Stack Overflow 2016最新架构探秘

这篇文章主要揭秘 Stack Overflow 截止到 2016 年的技术架构。   首先给出一个直观的数据,让大家有个初步的印象。   相比于 2013 ...

35170
来自专栏Debian社区

SolydXK 9 正式发布,基于 Debian 的发行

SolydXK 9 已正式发布,它基于最近发布的 Debian 9。 自上个 beta 版本发布以来,团队一直在测试、改进和开发。除了基于新的 Debian 9...

9620
来自专栏coder修行路

关于python开发CRM系统

注意本项目是针对培训学校开发简化的CRM CRM简介 CRM全称:customer relationship management 无CRM的痛点 没有CMR的...

67490
来自专栏安恒信息

预警 | Windows再爆SMB服务0day漏洞 安恒信息提供一键修复工具

在刚刚结束的2017年度DEFCON大会上,安全研究人员曝光了一个潜伏在Windows系统上长达20年之久的安全漏洞。该漏洞被命名为SMBLoris,攻击者使用...

375110
来自专栏农夫安全

Python 黑客——使用Python破解门禁系统

如何使用Python破解门禁系统 前言 Solesec白帽团队楚轩大校原创文章 正文 说起黑客,从小的我就觉得黑客很炫酷,我以前经常看...

91160
来自专栏贾老师の博客

谈谈分布一致性协议

23530
来自专栏Laoqi's Linux运维专列

Saltstack 基础安装配置

22760

扫码关注云+社区

领取腾讯云代金券