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()回调

Redis的发布订阅(pub/sub)功能允许发送者通过频道发送消息,多个订阅者可以同时接收这些消息。本文介绍了如何使用Jedis客户端进行订阅和发布操作,包括具体的回调方法如onMessage、onPMessage等,并展示了不同订阅方式的区别。
4845

被折叠的 条评论
为什么被折叠?



