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 ...
随机推荐
- codeforces 664C C. International Olympiad(数学)
题目链接: C. International Olympiad time limit per test 1 second memory limit per test 256 megabytes inp ...
- 51Nod - 1055:最长等差数列 (求最长的等差数列)
N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不列举) 1 3 5 1 5 9 13 3 6 9 12 ...
- atexit函数详解
对C语言有所了解的人都知道main函数是整个程序的入口,但是其实不然,在内核中可以使用链接器来设置程序的开始地方.当内核使⽤⼀个exec函数执⾏C程序时,在调⽤main函数之前先调⽤⼀个特殊的启动例程 ...
- 前端开发 --- CSS参考手册
目录 1 选择器 1.1 通用选择器 1.2 层次选择器 1.3 伪类选择器 1.3.1 动态伪类选择器 1.3.2 目标伪类选择器 1.3.3 UI元素状态伪类选择器 1.3.4 结构伪类选择器 1 ...
- pytest用例setup和teardown
函数式以下两种: setup_function/teardown_function 每个用例开始和结束调用一次 setup_module/teardown_module setup_modu ...
- 896C
ODT/珂朵莉树 原来这个东西很咸鱼,只能数据随机情况下nloglogn,不过作为卡常还是很好的 大概就是维护区间,值相同的并且连续当成一个区间存在set里,每次区间操作强行分裂就行了. 复杂度因为是 ...
- dockerfile创建镜像(二)
ENTRYPOINT 两种格式: ENTRYPOINT [“executable”, “param1”, “param2”] ENTRYPOINT command param1 param2 (she ...
- UVa 10723 Cyborg Genes (LCS, DP)
题意:给定两行字符串,让你找出一个最短的序列,使得这两个字符串是它的子串,并且求出有多少种. 析:这个题和LCS很像,我们就可以利用这个思想,首先是求最短的长度,不就是两个字符串长度之和再减去公共的么 ...
- Attributes.Add用途与用法
Attributes.Add("javascript事件","javascript语句"); 如: this.TextBox1.Attributes.add(& ...
- lightoj 1099【dijkstra/BFS】
题意: 求 1-N 的第二长路,一条路可以重复走 if two or more shortest paths exist, the second-shortest path is the one wh ...