Redis总结(五)redis发布订阅模式

本篇将向大家介绍怎么通过redis来实现订阅和发布功能

首先介绍一下实现功能的主要几个命令:

  1. SUBSCRIBE 命令,这个命令可以让我们订阅任意数量的频道
  2. PUBLISH 命令,此命令是用来发布消息
  3. PSUBSCRIBE命令,此命令用来支持模糊订阅的功能

在展示具体的demo之前,我们先简单了解下这其中的原理:

在redisServer结构中的其中一个属性pubsub_channels是用来记录channel和客户端之间的关系,是使用key–>List的数据格式。如图:
在这里插入图片描述

在我们使用SUBSCRIBE 命令在客户端client10086订阅了channel1 channel2,channel3

订阅:

SUBSCRIBE channel1 channel2,channel3

这时pubsub_channels的数据将会变为,如图:

在这里插入图片描述

这就可以看出来执行SUBSCRIBE 命令就是将客户端信息添加到对应的channel对应列表的尾部。

模式订阅:
模式订阅设计到redisServer的另一个属性pubsub_patterns,也是一个链表,里面存储着客户端订阅的所有模式。结构如下图:

在这里插入图片描述

当客户端订阅了一个模式,此时结构变为:

在这里插入图片描述

发布:

PUBLISH 命令发布消息将消息推送到对应的客户端

在执行PUBLISH 命令发布消息的时候,首先会在pubsub_channels上找到对应的channel,遍历其中所有的client信息,将消息发送到所有client;同时也会在pubsub_patterns上遍历找到匹配的模式,发给对应的客户端

取消订阅:

UNSUBSCRIBE命令取消对应客户端的订阅

当执行UNSUBSCRIBE命令时则将对应的client从channel列表中移除

具体demo如下:

首先我们创建两个客户端执行体:

package com.example.redisdemo.service;


import redis.clients.jedis.JedisPubSub;

/**
 * 订阅消息消费体.
 * @author yzlu
 */
public class OneJedisPubSub extends JedisPubSub {

   //接收到消息时执行
    @Override
    public void  onMessage(String channel, String message){
        System.out.println("oneJedisPubSub message is" + message);
    }

    //接收到模式消息时执行
    @Override
    public void onPMessage(S
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值