在之前的文章中,介绍过Redis数据库高级实用特性中的持久化机制,今天为大家介绍Redis的另一高级实用特性——发布及订阅消息。

  发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub/sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个channel,也可以向多个channel发送消息。

  下面做个实验。这里使用3不同的client, client1用于订阅tv1这个channel的消息,client2用于订阅tv1和tv2这2个chanel的消息,client3用于发布tv1和tv2的消息。

   
Client 1
Client 2
Client 3
   
redis 127.0.0.1:6379>subscribe tv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
redis 127.0.0.1:6379>subscribe tv1 tv2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "subscribe"
2) "tv2"
3) (integer) 2
   
redis 127.0.0.1:6379>publish tv1 program1
(integer) 2
redis 127.0.0.1:6379>
   
redis 127.0.0.1:6379> subscribe tv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "message"
2) "tv1"
3) "program1"
redis 127.0.0.1:6379> subscribe tv1 tv2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "subscribe"
2) "tv2"
3) (integer) 2
1) "message"
2) "tv1"
3) "program1"
   
redis 127.0.0.1:6379>publish tv2 program2
(integer) 1
redis 127.0.0.1:6379>
   
redis 127.0.0.1:6379> subscribe tv1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "message"
2) "tv1"
3) "program1"
redis 127.0.0.1:6379> subscribe tv1 tv2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tv1"
3) (integer) 1
1) "subscribe"
2) "tv2"
3) (integer) 2
1) "message"
2) "tv1"
3) "program1"
1) "message"
2) "tv2"
3) "program2"

  下面将详细的解释一下上面的例子

  1、client1订阅了tv1这个channel这个频道的消息,client2订阅了tv1和tv2这2个频道的消息

  2、client3 是用于发布tv1和tv2这2个频道的消息发布者

  3、接下来我们在client3发布了一条消息”publish tv1 program1”,大家可以看到这条消息是发往tv1这个频道的

  4、理所当然的client1和client2都接收到了这个频道的消息

  5、 然后client3又发布了一条消息”publish tv2 program2”,这条消息是发往tv2的,由于client1并没有订阅tv1,所以client1的结果中并没有显示出任何结果,但client2订阅了这个频道,所以client2是会有返回结果的。

  我们也可以用psubscribe tv*的方式批量订阅以tv开头的频道的内容。

  看完这个小例子后应该对pub/sub功能有了一个感性的认识。需要注意的是当一个连接通过subscribe或者psubscribe订阅通道后就进入订阅模式。在这种模式除了再订阅额外的通道或者用unsubscribe或者punsubscribe命令退出订阅模式,就不能再发送其他命令。另外使用 psubscribe命令订阅多个通配符通道,如果一个消息匹配上了多个通道模式的话,会多次收到同一个消息。

转载于:https://www.cnblogs.com/eefeng/archive/2013/05/14/3077126.html

Redis高级实用特性:发布及订阅消息相关推荐

  1. Redis学习第八课:Redis高级实用特性(一)

    Redis高级实用特性 注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2 1.安全性 设置客户端连接后进行任何其他指定前需要的密码.因为redis速度相当快, ...

  2. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  3. redis 高级实用教程

    一.设置redis外网访问 更改redis.conf 文件 # vim redis.conf bind 127.0.0.1 # 注释掉改行 protected-mode yes # 更改模式为no(r ...

  4. redis发布与订阅消息

    2019独角兽企业重金招聘Python工程师标准>>> Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客 ...

  5. 【redis】发布和订阅消息

    1.说明 在Redis2版本之后支持发布订阅功能,发布者创建一个频道,并在上面发送消息,所有订阅该频道的客户端都能收到消息(不出意外的情况下,但实际不一定),发布订阅的好处是减少不必要的轮询,应用场景 ...

  6. Redis源码分析 —— 发布与订阅

    前言 通过阅读Redis源码,配合GDB和抓包等调试手段,分析Redis发布订阅的实现原理,思考相关问题. 源码版本:Redis 6.0.10 思考问题 发布订阅基本概念介绍 订阅频道 -- SUBS ...

  7. 发布与订阅消息--Redis学习笔记八

    版权声明:本文为博主原创文章,未经博主允许不得转载. 操作示例: 打开三个Redis客户端,有三个会话 订阅者 发布者

  8. redis(18)--发布和订阅

    目录 频道的订阅与退订 订阅频道 退订频道 模式的订阅与退订 订阅模式 退订模式 发送消息 查阅订阅信息 Redis 通过 PUBLISH . SUBSCRIBE,PSUBSCRIBE 等命令实现了订 ...

  9. Redis高级特性介绍及实例分析

    本文将为大家介绍Redis的一些高级特性以及结合一个具体的实际案例来对Redis进行设计分析. Redis基础类型回顾 String Redis中最基本,也是最简单的数据类型.注意,VALUE既可以是 ...

最新文章

  1. Android视频压缩并且上传
  2. Virtools 3D行为编程系列(一)
  3. Direct3D 11 Tutorial 4: 3D Spaces_Direct3D 11 教程4:3D空间
  4. React jsx转换成原生JavaScript的一个例子
  5. C#中创建对象的方式
  6. microservices kubernetes
  7. 构造函数能默认初始化其静态成员么?
  8. 环回测试能够提供什么信息_VIAVI | 全面对比“真双向分析”与“环回测试”,结果一目了然!...
  9. Python 在数据科学中一直打压 R 语言?
  10. 如果这样 你跟小三走吧
  11. Maven的Scored介绍
  12. 解决Linux下使用QQ的问题
  13. matlab mac 更改语言,MAC让Matlab编辑器显示中文的方法
  14. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java文创产品推荐系统设计与实现95ml5
  15. 人工神经网络评价法案例_人工神经网络评价法.
  16. linux安装wine
  17. SpringBoot与Shiro整合-权限管理实战
  18. oracle游标添加数据,Oracle使用游标更新数据
  19. Linux-系统管理16-磁盘配额
  20. 简述 Symbol 类型用途

热门文章

  1. 银屑病与肠道菌群(调研手稿一)
  2. 肌肉减少症导致的老人跌倒
  3. linux下载b站的视频+ffmpeg抽取出mp3
  4. datatable删除csv中的一列
  5. “TypeError: 'dict_keys' object is not subscriptable”
  6. 吴恩达深度学习一:神经网络
  7. GL_RGBA和GL_RGB的差别
  8. 语音识别(四)——DTW, Spectrogram, Cepstrum Analysis
  9. video 标签存在的一些坑
  10. 已启用 https://chai2010.cn, 欢迎访问!