Redis系列(三)-Redis发布订阅及客户端编程
阅读目录
- 发布订阅模型
- Redis中的发布订阅
- 客户端编程示例
- 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
Redis系列(三)-Redis发布订阅及客户端编程相关推荐
- 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- Redis系列(三)-Redis哨兵模式(一篇文章让你全面的了解reids哨兵模式)
哨兵模式概述 举一个通俗易懂的例子 有一个皇帝(master)他有2个儿子,大儿子(slave1)和小儿子(slave2).有一天皇帝离家出走了皇位空虚(master宕机),大儿子和小儿子为了争夺皇位 ...
- 深入剖析Redis系列(七) - Redis数据结构之列表
前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...
- 深入剖析Redis系列(五) - Redis数据结构之字符串
前言 字符串类型 是 Redis 最基础的数据结构.字符串类型 的值实际可以是 字符串(简单 和 复杂 的字符串,例如 JSON.XML).数字(整数.浮点数),甚至是 二进制(图片.音频.视频),但 ...
- Redis——Redis删除策略和发布订阅
Redis删除策略和发布订阅 过期数据 Redis中的数据特征 时效性数据的存储结构 数据删除策略 定时删除 惰性删除 定期删除 删除策略对比 逐出算法 新数据进入检测 影响数据逐出的相关配置 Red ...
- Dapr微服务应用开发系列5:发布订阅构建块
题记:这篇介绍发布订阅构建块,这是对事件驱动架构设计的一种实现落地. 注:对于"Building Blocks"这个词组的翻译,我之前使用了"构件块",现在和官 ...
- RabbitMQ(三) ——发布订阅
RabbitMQ(三) --发布订阅 (转载请附上本文链接--linhxx) 一.概述 RabbitMQ的发布订阅(Publish/Subscribe),其将生产者和消费者进一步解耦,生产者生产消息后 ...
- NoSql之Redis系列一: Redis的数据类型和基本使用
NoSql之Redis系列一: Redis的数据类型和基本使用 Redis简介及特点 Redis常用数据结构及使用 启动redis-server (win) 使用redis-cli操作redis St ...
- Redis 进阶篇:发布订阅模式原理与运用
Redis 通过 SUBSCRIBE,UNSUBSCRIBE和 PUBLISH 实现发布订阅消息传递模式,Redis 提供了两种模式实现,分别是「发布 / 订阅到频道」和「发布 \ 订阅到模式」. [ ...
最新文章
- 春节互联网流量峰值破纪录 Gartner最新CDN报告将阿里云评为全球级
- CI框架 -- 附属类
- python空类型-python 空类型
- C#调用WSC(Windows Script Component)
- 【Kafka】kafka zk下注册的信息 get /brokers/ids/1 “host“:null “port“:-1
- 七月最后一波!微软专属内推码等你来抢
- yolov3前向传播(三)-- 坐标转换,iou计算,权重加载,图片显示
- 2021年危险化学品经营单位主要负责人考试技巧及危险化学品经营单位主要负责人模拟考试题库
- c语言选择结构训练试题,C语言临考练习试题
- 北京地铁21号线_北京迎来地铁22号线,全长81公里,沿线的市民有福了
- Flink1.15源码阅读flink-clients客户端执行流程(阅读较枯燥)
- (3)数据链数层——计算机网络复习笔记
- 解决SimpleWifi无法连接中文SSID(中文WIFI名称)问题的过程记录
- 如何做一份好的竞品分析:商业WIFI竞品分析让你不再跳坑
- 为什么html浮动高度不一样,css浮动导致的高度塌陷问题及清楚浮动的方法
- 3D点云变换(平移、旋转、缩放)C++实现
- Datawhale公众号运营周
- Android入门:Layout
- 关键路径上找时间,非关键路径上找资源
- Mean ± SEM or Mean(SD)
热门文章
- android 串口调试助手_Arduino入门 第八节-串口通讯(基础篇)
- 【job】面试中常见的笔试梳理
- Oracle 判断CLOB字段是否为null
- windows下批量杀死进程
- JavaScript------表单约束验证DOM方法
- Ansible8:Playbook循环
- 通过DMVS采集并存储SQL Server性能计数器数据
- 第七讲:tapestry可预览的模板页
- vs2003 打开VS.NET项目时遇到 “无法从web服务器获取项目文件” 解决方案
- Golang bytes.Buffer 用法精述