欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis进阶之发布订阅

程序员文章站 2022-05-21 09:22:43
...

Redis发布订阅

Reids发布订阅(pub/sub)是一种消息通信模式:发送者pub发送消息,订阅者sub接收消息。微信,微博,关注系统!Redis客户端可以订阅任意舒朗的频道
订阅/发布消息图
第一个:消息发送者,第二个:频道,第三个:消息订阅者
Redis进阶之发布订阅
下图展示了频道channel1,以及订阅这个频道的三个客户端–client1,client2,client5之间的关系
Redis进阶之发布订阅
当有新消息通过PUBLISH命令发送给channel1时,这个消息就会被发送给订阅他的三个客户端。
Redis进阶之发布订阅
Redis进阶之发布订阅

测试

#订阅者
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、订阅关注系统

相关标签: 数据库 redis