Redis进阶之发布订阅
程序员文章站
2022-05-21 09:22:43
...
Redis发布订阅
Reids发布订阅(pub/sub)是一种消息通信模式:发送者pub发送消息,订阅者sub接收消息。微信,微博,关注系统!Redis客户端可以订阅任意舒朗的频道
订阅/发布消息图
第一个:消息发送者,第二个:频道,第三个:消息订阅者
下图展示了频道channel1,以及订阅这个频道的三个客户端–client1,client2,client5之间的关系
当有新消息通过PUBLISH命令发送给channel1时,这个消息就会被发送给订阅他的三个客户端。
测试
#订阅者
127.0.0.1:6379> SUBSCRIBE smallcosmos #订阅一个频道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "smallcosmos"
3) (integer) 1
1) "message" #消息
2) "smallcosmos" #哪个频道
3) "hello,smallcosmos" #消息的具体内容
1) "message"
2) "smallcosmos"
3) "hello,redis"
#发布者
127.0.0.1:6379> PUBLISH smallcosmos "hello,smallcosmos" #发布者发布消息到频道
(integer) 1
127.0.0.1:6379> PUBLISH smallcosmos "hello,redis"
(integer) 1
jedis测试
package cn.smallcosmos;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
/**
* @Date 2020/5/15 上午11:15
* @Created by zhaoli
*/
public class pubsub {
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1",6379);
Jedis jedis2 = new Jedis("127.0.0.1",6379);
new Thread(new Runnable() {
@Override
public void run() {
int count = 0;
while (true){
jedis.publish("smallcosmos","hello,pubsub"+count++);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
jedis2.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("onMessage"+"---"+channel + ":" + message);
}
},"smallcosmos");
}
}).start();
}
}
使用场景:
1、实时消息系统
2、实时聊天系统
3、订阅关注系统