Redis的发布和订阅
Redis的发布和订阅
Redis发布订阅(pub/sub)是一种消息通信模式,pub发布消息,sub接收消息。(pub/sub)是一种生产者消费者模式,是实现消息队列的一种方式

redis的订阅和发布是解耦和多播的方式。且是一种消息队列的方式,可以实现系统解耦,削峰填谷,顶住流量洪峰。但redis的订阅和发布只是redis的一种尝试,redis的主要业务还是键值对的数据存储,缓存等,实际主流的消息队列有ActiveMQ,RabbitMQ等
操作方式
sub方要先订阅某个频道
进入redis-cli之后,执行 subsribe channelName。其中channelName支持模式匹配即使用*能匹配多个频道
然后发布方发布消息,接收方就能收到,执行: publish channelName content
接收方:要现有接收方,发布方的消息才能被收到,且接收方会一直监听消息
代码简单实现
package com.swagger.ranger.redis.Pub_Sub;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
/*******************************************************************************
* @Copyright (C), 2018-2019,github:Swagger-Ranger
* @FileName: RedisSubcriber
* @Author: liufei32@outlook.com
* @Date: 2019/3/24 18:08
* @Description: redis发布者
* @Aha-eureka: JedisPubSub是一个定义的抽象类,在这个类中定义publish/subscribe 回调方法,
* 通过继承JedisPubSub类并重写回调方法,当publish/subscribe 事件发生时,我们可以自己定制处理逻辑
*
* JedisPubSub的使用方法为:在一个Jedis的连接中调用其中的subscribe方法并传入JedisPubSub的子类,和频道名;
* 就可以自动接收订阅消息
*******************************************************************************/
public class RedisSubcriber extends JedisPubSub {
/**
* onMessage是一个回调的自动方法,当有消息时会自动执行该方法
* 重写本方法来实现自己的业务逻辑处理
* @param channel
* @param message
*/
@Override
public void onMessage( String channel, String message ) {
System.out.println("channel[" + channel + "] published a message that is [" + message + "]");
}
public static void main( String[] args ) {
Jedis jedis = new Jedis("120.27.227.49", 6379);
RedisSubcriber redisSubcriber = new RedisSubcriber();
jedis.subscribe(redisSubcriber, "channel1");
}
}
发布方
package com.swagger.ranger.redis.Pub_Sub;
import redis.clients.jedis.Jedis;
/*******************************************************************************
* @Copyright (C), 2018-2019,github:Swagger-Ranger
* @FileName: RedisPublisher
* @Author: liufei32@outlook.com
* @Date: 2019/3/24 18:29
* @Description: Redis的发布者
* @Aha-eureka: redis消息的发布者不需要继承或者实现某个类和接口,Jedis类直接就可以调用publish()方法发布消息
*******************************************************************************/
public class RedisPublisher {
public static void main( String[] args ) {
Jedis jedis = new Jedis("120.27.227.49", 6379);
jedis.publish("channel1", "Swagger-Ranger");
jedis.close();
}
}
本博客为Swagger-Ranger的笔记分享,文中源码地址: https://github.com/Swagger-Ranger
欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com
Redis的发布和订阅的更多相关文章
- redis实现发布(订阅)消息
redis实现发布(订阅)消息 什么是redis的发布订阅(pub/sub)? Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能.基于事件的系统中,Pub/S ...
- Redis的发布与订阅
业务: 运用数据与信息指导小药工的采购生产与销售行为 需求背景: (1)药工汇小程序用户(即小型中药初加工用户)需要知道自己加工的品种的价格涨跌信息和品种相关资讯) 需求分析拆解: (1)使用爬虫程序 ...
- redis的发布与订阅机制
Redis 发布/订阅机制原理分析 Redis 通过 PUBLISH. SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能. 这些命令被广泛用于构建即时通信应用,比如网络聊天室(c ...
- 一文带你了解 Redis 的发布与订阅的底层原理
01.前言 发布订阅系统在我们日常的工作中经常会使用到,这种场景大部分情况我们都是使用消息队列的,常用的消息队列有 Kafka,RocketMQ,RabbitMQ,每一种消息队列都有其特性,关于 Ka ...
- redis:消息发布与订阅频道
1. 发布与订阅频道 消息发布与订阅像收音机与广播台的关系 1.1. publish channel message 发布频道 语法:publish channel message 作用:发布频道消息 ...
- springboot使用redis实现发布与订阅
配置redis连接地址 # Redis服务器地址 spring.redis.host=youxiu326.xin # Redis服务器连接端口 spring.redis.port=6379 # Red ...
- springboot2.0整合redis的发布和订阅
1.Maven引用 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- redis的发布和订阅操作
- Redis - 发布和订阅
一.概述 1). 发布和订阅是一种消息通信模式. 2). 优点:使消息订阅者和消息发布者耦合度降低,类似设计模式中的观察者模式. 二.发布和订阅 订阅命令: // 订阅一个或多个频道 // 返回值:v ...
随机推荐
- Css的使用细谈
Css的使用细谈 Css可以通过简单的更改CSS文件,改变网页的整体表现形式,可以减少我们的工作量,所以她是每一个网页设计人员的必修课. Css简介 (1) CSS是用于布局 ...
- hadoop源码剖析--RawLocalFileSystem
RawLocalFileSystem是hadoop中实现的本地文件系统,在该类中与文件元数据和目录相关的操作,都是通过适配方式适配到java.io.File的对应API来完成的,适配过程简单,代码清晰 ...
- 2016.4.23浙江省赛(zoj3936 zoj3938 zoj3940 zoj3944 zoj3946 zoj3947 )
A Apples and Ideas Time Limit: 2 Seconds Memory Limit: 65536 KB "If you have an apple ...
- kali本機安裝openvas的血淚史復盤
安裝openvas的血淚史 因爲學習的需要,需要裝openvas,但是在虛擬機裏面,無論怎麼更新跟新源,總是會有問題,一氣之下,便不用虛擬機了,將自己的物理機刷成了kali機,從此便進了一個大坑. 安 ...
- BZOJ_3786_星系探索_splay维护出栈入栈序
BZOJ_3786_星系探索_splay维护出栈入栈序 Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为 ...
- C++之萃取技术(traits)
为什么需要类型萃取(特化) 前面我们提到了迭代器,它是一个行为类似于smart pointer之类的东西,主要用于对STL容器中的对象进行访问,而且不暴露容器中的内部结构,而迭代器所指对象的型别称为该 ...
- git add . 的时候遇到warning: LF will be replaced by CRLF inXXX 解决办法
$ git add . warning: LF will be replaced by CRLF in shop/Runtime/Cache/86bbc820c9ec1 d314a9c71cf5651 ...
- python读写mysql总结
一.MySQLdb包的安装 1. 在win环境下,下载MySQL-python-1.2.3,有两种方式: (1) 下载src源码.tar.gz(这个源码需要build编译再安装.egg包(当于.jar ...
- Flutter实战视频-移动电商-10.首页_FlutterSwiper轮播效果制作
10.首页_FlutterSwiper轮播效果制作 博客地址: https://jspang.com/post/FlutterShop.html#toc-5c2 flutter_swiper http ...
- 洛谷 - P3935 - Calculating - 整除分块
https://www.luogu.org/fe/problem/P3935 求: \(F(n)=\sum\limits_{i=1}^{n}d(i)\) 枚举因子\(d\),每个因子\(d\)都给其倍 ...