redis 学习(12)-- redis 发布订阅
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 发布订阅的更多相关文章
- Redis学习笔记8--Redis发布/订阅
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似.pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者 ...
- Redis学习笔记(8)-发布/订阅
package cn.com; import java.util.List; import redis.clients.jedis.Jedis; public class Redis_PubSub { ...
- 第三百零一节,python操作redis缓存-管道、发布订阅
python操作redis缓存-管道.发布订阅 一.管道 redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pi ...
- StackExchange.Redis学习笔记(五) 发布和订阅
Redis命令中的Pub/Sub Redis在 2.0之后的版本中 实现了 事件推送的 发布订阅命令 以下是Redis关于发布和订阅提供的相关命令 SUBSCRIBE channel [channe ...
- redis实现消息队列&发布/订阅模式使用
在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录. Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...
- Spring Boot使用Redis进行消息的发布订阅
今天来学习如何利用Spring Data对Redis的支持来实现消息的发布订阅机制.发布订阅是一种典型的异步通信模型,可以让消息的发布者和订阅者充分解耦.在我们的例子中,我们将使用StringRedi ...
- Redis进阶篇:发布订阅模式原理与运用
"65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?" "那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆 ...
- Redis基础知识 之——发布/订阅
一.说明: 订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者).而是发布的消息分到不同的频道,不需要知道什么样的订阅者订阅 ...
- Spring Data Redis实现消息队列——发布/订阅模式
一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现. 定义:生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ...
- Redis(二)-- 发布订阅、事务、安全、持久化
一.Redis发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. 打开两个窗口:session1 和 session2 在sess ...
随机推荐
- bedtools 用法大全
原文:https://cloud.tencent.com/developer/article/1078324 前言: bedtools等工具号称是可以代替普通的生物信息学数据处理工程师的!我这里用一个 ...
- koa 基础(二十五)数据库 与 art-template 模板 联动 --- 新增数据
1.视图层 根目录/views/index.html <!DOCTYPE html> <html lang="en"> <head> <m ...
- JNI的开发步骤
使用C函数实现Java本地方法: 1. 在java代码里面声明一个native的方法 public native String helloFromC(); 2. 在工程目录下面创建一个jni的文件夹 ...
- shell脚本安装python、pip-----非交互式的--批量执行函数
首先把pip-.tgz 安装包放在 /usr/local 下面,按照顺序先安装pip,再安装python.不要先安装或只安装python,否则很容易出错, cat >>pip-python ...
- linux下安装jdk8并且配置环境变量
su回车进入root账户 查看是否安装过jdk8使用命令 # rpm -qa | grep -i jdk 创建文件夹用来存放下载的jdk使用命令 # mkdir -p /usr/local/src/j ...
- 浅谈微信小程序生命周期
之前在做微信小程序的时候,一直对生命周期里面的onLoad,onShow,onUnload不是很理解.比如说什么时候会触发onUnload. 经过一段时间的测试发现,普通页面的onUnload在三种情 ...
- Day03:日期操作 / 集合框架(上)
日期操作 Java中的时间 · Java中的时间使用标准类库的Date类表示,是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点: · 固定的时间点叫纪元(epoch),是U ...
- Mac OS下使用pyenv管理Python版本
问题的由来 在开发过程中,可能会遇到多个版本同时部署的情况. Mac OS自带的Python版本是2.x,自己开发需要Python3.x 系统自带的是2.6.x,开发环境是2.7.x 由于Mac机器系 ...
- python-Web-项目-svn和git
SVN概念: >>>本地服务端 >>>服务端: 安装:windows傻瓜式安装 使用: 1 在弹出的右键菜单中选择Create New Repository或者新建 ...
- 【HANA系列】SAP HANA SQL取表中每行最小值
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL取表中每 ...