redis 发布订阅

发布订阅模式中的角色

  • 发布者(publisher)
  • 订阅者(subscriber)
  • 频道(channel)

如图所示:

发布者发布消息到频道,订阅了频道的订阅者可以收到消息,订阅者可以订阅不同的频道。

通信模型

  • RedisServer中可以创建若干channel
  • 一个订阅者可以订阅多个channel
  • 当发布者向一个频道中发布一条消息时,所有的订阅者都将会收到消息
  • Redis的发布订阅模型没有消息积压功能,即新加入的订阅者收不到发布者之前发布的消息
  • 当订阅者收到消息时,消息内容如下
    • 第一行:固定内容message
    • 第二行:channel的名称
    • 第三行:收到的新消息

发布订阅的 API

命令 含义
publish channel message 向指定的channel中发布消息
subscribe channel1 [channel2...] 订阅给定的一个或多个渠道的消息
unsubcribe [channel1 [channel2...]] 取消订阅给定的一个或多个渠道的消息
psubscribe pattern1 [pattern2...] 订阅一个或多个符合给定模式的频道
punsubscribe [pattern1 [pattern2...]] 退订所有给定模式的频道
pubsub channel 列出至少有一个订阅者的频道
pubsub numsub [channel...] 列出给定频道的订阅者数量

演示

消息队列和发布订阅区别

我们来看一张消息队列通信模型的图:

可以看到:

发布订阅模式是将消息通知每一个订阅者,消息队列是消息发布者发表消息后只有一个消息订阅者收得到,订阅者争抢接受消息,这是一个抢的功能。

发布订阅 - Jedis

//订阅
public void testSubscribe() {
Jedis jedis = new Jedis("127.0.0.1" , 6381);
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("receive channel ["+channel+"] message ["+message+"]");
}
} , "aliTV" , "googleTV");
} //发布
public void testPublish() {
Jedis jedis = new Jedis("127.0.0.1" , 6381);
jedis.publish("aliTV" , "I am xxx");
jedis.publish("googleTV" , "My age is 21");
}

redis 学习(12)-- redis 发布订阅的更多相关文章

  1. Redis学习笔记8--Redis发布/订阅

    发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似.pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者 ...

  2. Redis学习笔记(8)-发布/订阅

    package cn.com; import java.util.List; import redis.clients.jedis.Jedis; public class Redis_PubSub { ...

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

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

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

    Redis命令中的Pub/Sub Redis在 2.0之后的版本中 实现了 事件推送的  发布订阅命令 以下是Redis关于发布和订阅提供的相关命令 SUBSCRIBE channel [channe ...

  5. redis实现消息队列&发布/订阅模式使用

    在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录.   Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...

  6. Spring Boot使用Redis进行消息的发布订阅

    今天来学习如何利用Spring Data对Redis的支持来实现消息的发布订阅机制.发布订阅是一种典型的异步通信模型,可以让消息的发布者和订阅者充分解耦.在我们的例子中,我们将使用StringRedi ...

  7. Redis进阶篇:发布订阅模式原理与运用

    "65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?" "那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆 ...

  8. Redis基础知识 之——发布/订阅

    一.说明: 订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者).而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅 ...

  9. Spring Data Redis实现消息队列——发布/订阅模式

    一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现. 定义:生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ...

  10. Redis(二)-- 发布订阅、事务、安全、持久化

    一.Redis发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 打开两个窗口:session1 和 session2 在sess ...

随机推荐

  1. 安装两个版本的python安装包,后安装的python程序打开时闪退

    1.环境变量的问题 (Win7)右键打开“计算机”的属性设置→高级系统设置→环境变量.  在系统变量中的path中,编辑,在末尾加入Python的安装路径“F:\Python27”, 路径与路径之间使 ...

  2. [sh]shell语法小结

    参考 基础语法 数字比较 -lt -eq -gt [ `ps -ef|grep nginx|grep -v grep|wc -l` -eq 0 ] str比较 == != [ $USER == &qu ...

  3. wpf webbrowser取消js报错

    private void WebBrowser_Navigated(object sender, NavigationEventArgs e) { SuppressScriptErrors((WebB ...

  4. springboot2.0双数据源配置

    题记:由于项目中不只是用一个数据库,所以记下以免忘记. 1.首先展示目录结构 2.pom配置文件 <?xml version="1.0" encoding="UTF ...

  5. c# 动态编译CodeDomProvider.CompileAssemblyFromSource(CompilerParameters cp,string code)

    1.使用c#动态编译,可参考如下: //生成c#代码 string code = GenerateCode(); CodeDomProvider cdp = CodeDomProvider.Creat ...

  6. layui 常用确认框、提示框 demo

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  7. 手动部署 OpenStack Rocky 双节点

    目录 文章目录 目录 前言 OpenStack 架构 Conceptual architecture Logical architecture 网络选型 Networking Option 1: Pr ...

  8. Python——PYQT:控件基本使用

    QtGui.QComboBox控件常用函数: .addItem(string) #添加字符串项到Item .addItems(list) #添加列表或元组元素到Item .clear() #清除所有I ...

  9. spring boot starter是什么

    参考自:https://www.cnblogs.com/EasonJim/p/7615801.html Spring Boot中Starter是什么 比如我们要在Spring Boot中引入Web M ...

  10. Python:Base3(函数,切片,迭代,列表生成式)

    1.Python之调用函数: Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数 abs,它接收一个参数. 可以直接从Python的官方 ...