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的发布和订阅的更多相关文章

  1. redis实现发布(订阅)消息

    redis实现发布(订阅)消息 什么是redis的发布订阅(pub/sub)?   Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能.基于事件的系统中,Pub/S ...

  2. Redis的发布与订阅

    业务: 运用数据与信息指导小药工的采购生产与销售行为 需求背景: (1)药工汇小程序用户(即小型中药初加工用户)需要知道自己加工的品种的价格涨跌信息和品种相关资讯) 需求分析拆解: (1)使用爬虫程序 ...

  3. redis的发布与订阅机制

    Redis 发布/订阅机制原理分析 Redis 通过 PUBLISH. SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能. 这些命令被广泛用于构建即时通信应用,比如网络聊天室(c ...

  4. 一文带你了解 Redis 的发布与订阅的底层原理

    01.前言 发布订阅系统在我们日常的工作中经常会使用到,这种场景大部分情况我们都是使用消息队列的,常用的消息队列有 Kafka,RocketMQ,RabbitMQ,每一种消息队列都有其特性,关于 Ka ...

  5. redis:消息发布与订阅频道

    1. 发布与订阅频道 消息发布与订阅像收音机与广播台的关系 1.1. publish channel message 发布频道 语法:publish channel message 作用:发布频道消息 ...

  6. springboot使用redis实现发布与订阅

    配置redis连接地址 # Redis服务器地址 spring.redis.host=youxiu326.xin # Redis服务器连接端口 spring.redis.port=6379 # Red ...

  7. springboot2.0整合redis的发布和订阅

    1.Maven引用 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  8. redis的发布和订阅操作

  9. Redis - 发布和订阅

    一.概述 1). 发布和订阅是一种消息通信模式. 2). 优点:使消息订阅者和消息发布者耦合度降低,类似设计模式中的观察者模式. 二.发布和订阅 订阅命令: // 订阅一个或多个频道 // 返回值:v ...

随机推荐

  1. hdu 1753 大明A+B(大数)

    题意:小数大数加法 思路:大数模板 #include<iostream> #include<stdio.h> #include<string.h> using na ...

  2. Nginx基本配置和作用

    nginx可以重新加载文件的.我们直接运行:nginx -s reload 配置文件有没有问题,可以直接输入:nginx -t nginx -s stop就可以关闭 但有时我们就不想它挂的时候访问另外 ...

  3. pycharm 开发连接linux 服务器

    这样就可以了.....

  4. 无向图hash

    一个效果还行的 无向图hash判同构的方法 求出每个点向其它点的最短路,然后排序,然后按字符串拼接起来,再按每个点的字符串 排序后的rank 作为每一个点的初始hash值 然后每一轮,把每个点的相邻点 ...

  5. c和c++字符串分割

    1.c++版本,第一个参数为待分割的字符串 , 第二个参数为分割字符串 std::vector<std::string> split(const std::string& s, c ...

  6. C++之面向对象初探----对象管理模型(关键是this指针)

    前言 c++对象模型可以概括为以下2部分 1.语言中直接支持面向对象程序员设计部分,主要涉及如构造函数.析构函数.虚函数.继承(单继承.多继承.虚继承).多态等待. 2.对于各种支持的底层实现机制 在 ...

  7. map插入与查找

    用map构建映射关系可以用来离散化,这里记录一下用法: 插入:将要插入的两个值组成pair,用insert插入map中: 查找:定义iterator,赋成find返回的迭代器,如果没有找到则=mp.e ...

  8. Ubuntu16.04 + cuda9.0 + cudnn7.1.4 + tensorflow安装

    安装前的准备 UEFI 启动GPT分区 Win10和Ubuntu16.04双系统安装 ubuntu16.04 NVIDIA 驱动安装 ubuntu16.04 NVIDIA CUDA8.0 以及cuDN ...

  9. SSAS GUID 添加 行计数,非重复计数 等 遇到的莫名其妙的问题

    在基于某个GUID 进行非重复性计数时 需要对GUID 转换类型,如:CAST(ColumnName as varchar(36)) 可参考:http://stackoverflow.com/ques ...

  10. 1-1 课程简介 & 2-1 IDEA与Eclipse的不同 & 2-3 Intellij IDEA安装

    ---恢复内容开始--- F:\教程\java-慕课\从网页搭建入门Java Web\Java web\步骤四:常用功能\1.IntelliJ IDEA开发工具入门 1-1 课程简介 2-1 IDEA ...