一、概述


1). 发布和订阅是一种消息通信模式。

2). 优点:使消息订阅者和消息发布者耦合度降低,类似设计模式中的观察者模式。

二、发布和订阅


订阅命令:

// 订阅一个或多个频道
// 返回值:value_1 为 “subcribe” 表示订阅成功,value_2 为订阅的频道名称,value_3 表示当前订阅的频道个数
subscribe channel1 channel2 channel3 ...
// 模式订阅
// 返回值:value_1 为 “psubcribe” 表示订阅成功,value_2 为订模式订阅的 pattern,value_3 表示当前订阅的频道个数
psubscribe abc* xyz* ...

发布命令:

// 发布命令
publish channel msg

启动订阅者 X 和订阅者 Y,分别发出订阅命令,如下面两张图片:

启动发布者,发布如下消息:

订阅者 X 和订阅者 Y 都收到了订阅消息:

取消订阅(取消订阅在官方给的客户端上是无法模拟的)

UNSUBSCRIBE  cctv-
PUNSUBSCRIBE cctv-*

查看订阅

// 查看订阅的所有频道
pubsub channels;
pubsub channels msg*;
// 查看该频道的订阅人数
pubsub numsub channel1 channel2 ... ;

   

三、编程展示 Redis 的发布和订阅


编程展示:

public class MySub extends JedisPubSub{

    @Override
public void onMessage(String channel, String msg) {
System.out.println("onMessage - " + channel +" - " +msg);
} @Override
public void onPMessage(String pattern, String channel, String msg) {
System.out.println("onPMessage - " + pattern +" - "+ channel +" - " +msg);
} @Override
public void onPSubscribe(String channel, int msg) {
System.out.println("onPsubscribe - " + channel +" - "+ msg);
} @Override
public void onPUnsubscribe(String arg0, int arg1) {} @Override
public void onSubscribe(String channel, int number) {
System.out.println("onSubscribe - " + channel +" - "+ number); } @Override
public void onUnsubscribe(String arg0, int arg1) {}
}

订阅者 A

public class SubClient {
public static void main(String[] args) {
MySub sub = new MySub();
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.subscribe(sub, "cctv-1");
}
}

订阅者 B (模式订阅)

public class PsubClient {
public static void main(String[] args) {
MySub sub = new MySub();
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.psubscribe(sub, "cctv*");
}
}

发布者 C

public class PubClient {
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.publish("cctv-1", "hello,this is cctv-1");
}
}

依次运行客户端 ABC

A 端输出

onSubscribe - cctv-1 - 1
onMessage - cctv-1 - hello,this is cctv-1

B 端输出

onPsubscribe - cctv* - 1
onPMessage - cctv* - cctv-1 - hello,this is cctv-1

Redis - 发布和订阅的更多相关文章

  1. 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ

    本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个red ...

  2. redis发布与订阅

    发布与订阅 除了实现任务队列外, Redis还提供了一组命令可以让开发者实现"发布/订阅"(publish/subscribe)模式. "发布/订阅"模式同样可 ...

  3. redis 发布和订阅实现

    参考文献 15天玩转redis -- 第九篇 发布/订阅模式 <Redis设计与实现> 命令简介 在redis用户手册中,跟发布订阅相关的命令有如下的六个: PSUBSCRIBE PUBL ...

  4. redis 发布与订阅原理分析

    前言:用了redis也有一段时间了,但是发布与订阅的使用频率也不高,趁着这次空闲,深究下redis的发布与订阅模式. 一.订阅频道和信息发布 功能说明:Redis 的 SUBSCRIBE 命令可以让客 ...

  5. Redis——发布和订阅

    发布与订阅(又称pub/sub),订阅者(listener)负责订阅频道(channel),发送者(publisher)负责向频道发送二进制字符串消息(binary string message).每 ...

  6. php swoft redis 发布和订阅

    //订阅 public function subscribe() { /* @var \Swoft\Redis\Redis $redis */ $redis = App::getBean(\Swoft ...

  7. Redis 发布与订阅模式

    subscribe  订阅 publish   发布   频道    发布内容

  8. Redis 发布与订阅 消息

    基于Redis消息队列-实现短信服务化 1.Redis实现消息队列原理 常用的消息队列有RabbitMQ,ActiveMQ,个人觉得这种消息队列太大太重,本文介绍下基于Redis的轻量级消息队列服务. ...

  9. 03 Redis发布与订阅

    以qq群的公告,单个发布者,多个收听者为例 发布/订阅 实验 发布订阅的命令 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE ch ...

随机推荐

  1. 节点操作-创建并添加&删除节点&替换&克隆节点

    <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

  2. 【iCore3 双核心板】例程十:RTC实时时钟实验——显示日期和时间

    实验指导书及代码包下载: http://pan.baidu.com/s/1jHuZcnc iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  3. Java虚拟机内存管理机制

    自动内存管理机制 Java虚拟机(JVM)在执行Java程序过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区 ...

  4. php执行root命令

    一.确定php的sysem等函数可用 二.编写c程序,如ipt.c #include <stdio.h>#include <stdlib.h>#include <sys/ ...

  5. 【转】Unity中添加组件的几种方法

    http://blog.csdn.net/monzart7an/article/details/23199647 一.在编辑器上面添加一个组件.这个不用多说. 二.在脚本中利用AddComponent ...

  6. 如何用按钮的click事件去触发a标签的click事件

    在jQquery中,可以用如下方式触发input.a标签的click事件: <input id="my_input" /> <a id="my_a&qu ...

  7. jquery设置checkbox状态,设置dropdownlist选中值,隐藏某控件,给某控件追加东西

    jquery设置checkbox状态 $("[ID$=chkType]").attr("checked", true); jquery设置dropdownlis ...

  8. vim - Highlight unwanted spaces

    http://vim.wikia.com/wiki/VimTip396 precondition: set hlsearch" Show all tabs:/\t" Show tr ...

  9. Python之路-python(装饰器、生成器、迭代器、Json & pickle 数据序列化、软件目录结构规范)

    装饰器: 首先来认识一下python函数, 定义:本质是函数(功能是装饰其它函数),为其它函数添加附件功能        原则:        1.不能修改被装饰的函数的源代码.        2.不 ...

  10. [转] CentOS单独安装Apache Benchmark压力测试工具的办法

    Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-util包,安装命令为: 1 ...