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. Java内存和垃圾回收

    Java内存大体上可以分为:本地方法区(线程共享).Java栈(线程隔离).本地方法栈(线程隔离).Java堆(线程共享).程序计数器(线程隔离). 1.本地方法区 各个线程共享的内存区域,只要存放被 ...

  2. Java String字符串的不可变

    Java 通过把String类设计为final使类不可继承,将变量value设置为private并且是final的,且value没有setter方法,不可修改. 为什么这么设计: 1.字符串常量池的需 ...

  3. flask 第六篇 flask内置的session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from ...

  4. TCP输入 之 快速路径和慢速路径

    概述 快速路径:用于处理预期的,理想情况下的数据段,在这种情况下,不会对一些边缘情形进行检测,进而达到快速处理的目的: 慢速路径:用于处理那些非预期的,非理想情况下的数据段,即不满足快速路径的情况下数 ...

  5. 2.1 MATLAB的数据类型

    2.1 MATLAB的数据类型 每种数据类型都是以矩阵的形式存在的 数据类型:数值型.字符型.元胞型.结构体.函数句柄 数值型包含:双精度类型.单精度类型.整型 支持不同数据的转换 2.1.1 变量与 ...

  6. LC 553. Optimal Division

    Given a list of positive integers, the adjacent integers will perform the float division. For exampl ...

  7. GitHub:Tencent

    ylbtech-GitHub:Tencent 1.返回顶部 1. https://opensource.tencent.com/ 2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶 ...

  8. java web 开发三剑客 -------电子书

    Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知In ...

  9. JavaScript中的bind,call和apply函数的用法和区别

    一直没怎么使用过JavaScript中的bind,call和apply, 今天看到一篇比较好的文章,觉得讲的比较透彻,所以记录和总结如下 首先要理解的第一个概念,JavaScript中函数调用的方式, ...

  10. 山东省第十届ACM省赛参赛后的学期总结

    5.11,5.12两天的济南之旅结束了,我也参加了人生中第一次正式的acm比赛,虽然是以友情队的身份,但是我依旧十分兴奋. 其实一直想写博客来增加自己的能力的,但是一直拖到现在,正赶上老师要求写一份总 ...