Redis发布和订阅(Linux命令和java实现)

Redis实现的发布和订阅

api
在这里插入图片描述
重要的方法说明
A、publish发布消息

语法:publish chanel message
作用:将message消息发送到channel频道。message是要发送的消息,channel是自定
义的频道名称(例如cctv1,cctv5),唯一标识发布者。
返回值:数字。接收到消息订阅者的数量

B、subscribe订阅频道
语法:subscribe channel[channel…]
作用:订阅一个或多个频道的信息
返回值:订阅的消息

C、unsubscribe退订频道
语法:unsubscribe channel [channel]
作用:退出指定的频道,不订阅。
返回值:退订的告知消息

一、Linux实现原理

1.1、开启3个redis客户端(2个做消息的订阅者,1个做消息的发布者)

在这里插入图片描述
这里用第一个做消息的发布者

1.2、让后两个订阅者订阅一个频道(“cctv5”)

执行subscribe cctv5 的命令‘’
在这里插入图片描述

1.3、用发布者(redis客户端)发送消息,验证订阅者是否能接受到消息

publish 消息

在这里插入图片描述
查看订阅端
在这里插入图片描述
经过验证就能说明(发布和订阅)成功

1.4、一方退出客户端(或者退订)

在这里插入图片描述

上图表明一个客户端已经退出(ctrl+c)
再次在发布者端发送一个消息(观察接收端)
在这里插入图片描述
在这里插入图片描述
通过上图,证明一方退出以后,将接受不到消息,而未退出的依旧能接受消息

二、java代码实现原理(Jedis)

2.1、导入Jedis依赖(maven官网找)

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.1.0</version>
</dependency>

2.1、创建一个订阅者类(RedisSubScribe)

package com.redis.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @ClassName
 * @Description 订阅者
 * @Author ZQS
 * @Date 2020/8/15 0015 14:31
 * @Version 1.0
 **/
public class RedisSubScribe extends JedisPubSub {

    /***
     *当收到消息回调
     * @param channel
     * @param message
     */
    @Override
    public void onMessage(String channel, String message) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        System.out.println("我是订阅者:订阅频道[" + channel + "],收到的消息是:[" + message + "],时间为:[" + df.format(new Date()) + "]");

    }

    public static void main(String[] args) {
        //创建jedis对象
        Jedis jedis=new Jedis("49.234.127.186",6379);
        RedisSubScribe redisSubScribe=new RedisSubScribe();
        jedis.subscribe(redisSubScribe,"cctv6");
    }


}

  1. 继承JedisPubSub 类(最大的订阅者父类)
  2. 重写onMessage()方法
  3. 运行方法中创建Jedis对象,与远端Redis连接(地址、端口)
  4. 创建订阅者对象
  5. 从Redis订阅jedis.subscribe(redisSubScribe,“cctv6”);
  6. 运行(等待状态)

在这里插入图片描述

第一种

2.2、在redis客户端向频道(cctv6)发送消息

发送之前注意(高版本需要设置)
在redis.config文件中设置(屏蔽只能本地读取+#)

在这里插入图片描述

设置能在别的客户端连接这个Redis服务器(将yes改为no)
在这里插入图片描述

在这里插入图片描述

2.3、查看控制台(订阅者端)是否接受消息

在这里插入图片描述

第二种
创建发布者类

package com.redis.test;

import redis.clients.jedis.Jedis;

/**
 * @ClassName
 * @Description 发布者
 * @Author ZQS
 * @Date 2020/8/15 0015 15:41
 * @Version 1.0
 **/
public class MyRedisPublish {
    public static void main(String[] args) {
        // 创建Jedis
        Jedis jedis = new Jedis("49.234.127.186", 6379);
        jedis.publish("cctv6", "玫瑰");
        System.out.println("发布消息完毕....");
    }
}

在这里插入图片描述

在这里插入图片描述

这样就完成了一个简单的订阅和发布功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值