redis 的发布订阅

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

Redis 客户端可以订阅任意数量的频道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

发送者

发送者直接通过jedis的publish方法,发布消息。

订阅者

订阅者通过jedis.subscribe()和jedis.psubscribe()实现对发送消息的订阅。两者都需要传入一个JedisPubSub的实现类。区别是subscribe需要传入具体的监听通道名称,而psubscribe是可以传入模糊的通道正则,对所有匹配的通道进行监听。

redisMsgListener类如下
package org.aj.flink.redis;


import redis.clients.jedis.JedisPubSub;

public class RedisMsgListener extends JedisPubSub {

    public void unsubscribe() {
        super.unsubscribe();
    }

    public void unsubscribe(String... channels) {
        super.unsubscribe(channels);
    }

    public void subscribe(String... channels) {
        super.subscribe(channels);
    }

    public void psubscribe(String... patterns) {
        super.psubscribe(patterns);
    }

    public void punsubscribe() {
        super.punsubscribe();
    }

    public void punsubscribe(String... patterns) {
        super.punsubscribe(patterns);
    }

    public void onMessage(String channel, String message) {
        System.out.println("111111");
//        logger.info("onMessage: channel[{}], message[{}]",channel, message);
    }

    public void onPMessage(String pattern, String channel, String message) {
        System.out.println("222222");
//        logger.info("onPMessage: pattern[{}], channel[{}], message[{}]", pattern, channel, message);
    }

    public void onSubscribe(String channel, int subscribedChannels) {
        System.out.println("3333333");
//        logger.info("onSubscribe: channel[{}], subscribedChannels[{}]", channel, subscribedChannels);
    }

    public void onPUnsubscribe(String pattern, int subscribedChannels) {
        System.out.println("4444444");
//        logger.info("onPUnsubscribe: pattern[{}], subscribedChannels[{}]", pattern, subscribedChannels);
    }

    public void onPSubscribe(String pattern, int subscribedChannels) {
        System.out.println("5555555");
//        logger.info("onPSubscribe: pattern[{}], subscribedChannels[{}]", pattern, subscribedChannels);
    }

    public void onUnsubscribe(String channel, int subscribedChannels) {
        System.out.println("66666666");
//        logger.info("channel:{} is been subscribed:{}", channel, subscribedChannels);
    }
}

 并且如果使用subscribe()进行监听的话,会触发onMessage()回调

如果使用psubscribe()进行监听的话,会触发onPMessage()回调

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值