Redis的订阅与发布
首先要知道四个命令,分别是 **publish、subscribe、unsubscribe、psubscribe **
- publish:发布
- subscribe:订阅
- unsubscribe:取消订阅
- psubscribe:订阅模式
- 订阅模式:其实就是多个“频道”。
- 例如:订阅了[abc]zkw模式,其实就是订阅了azkw、bzkw、czkw,这三个“频道”。
- 订阅可以使多个频道,发送者也就是频道的拥有者,可以发送给指定的频道
如下订阅一个频道

订阅多个频道(模式)

java的订阅与发布
发布

发布消息
public static void publishMsg(String channel,String message){
Jedis jedis = new Jedis("192.168.18.123", 6379);
try {
jedis.publish(channel,message);
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}
订阅消息
public static JedisPubSub jedisPubSub = new JedisPubSub(){
@Override
public void onMessage(String channel, String message) {
System.out.println("==============================");
System.out.println("收到了:"+channel+"频道发送的消息");
System.out.println("消息:"+message);
}
@Override
public void onSubscribe(String channel, int subscribedChannels) {
System.out.println("订阅了" + channel + "频道");
System.out.println(channel + " : " + subscribedChannels);
}
};
订阅

订阅频道,但是我们在订阅频道的时候可能会出现取消频道的操作,那么怎么处理呢?这就需要用到上边类,这里是一个阻塞队列,所以要用多线程
public static void subscribeMsg(String channels){
Jedis jedis = new Jedis("192.168.18.123", 6379);
new Thread(()->{
try {
jedis.subscribe(jedisPubSub,channels);
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.close();
}
}).start();
}
测试
public static void main(String[] args) {
//订阅的名字
JedisUtils.subscribeMsg("test");
//发送消息
JedisUtils.publishMsg("test","hello");
JedisUtils.publishMsg("test","world");
}
结果如下

本文介绍了Redis的订阅与发布功能,包括publish、subscribe、unsubscribe和psubscribe四个核心命令。通过示例展示了如何使用Java进行消息的发布和订阅。订阅者可以订阅多个频道或模式,发布者可以向特定频道发送消息。Java代码中,使用Jedis库实现了消息的发布和订阅功能,其中JedisPubSub类用于处理接收到的消息。
457

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



