中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis中怎么實現發布訂閱

發布時間:2021-07-30 14:31:29 來源:億速云 閱讀:120 作者:Leah 欄目:大數據

redis中怎么實現發布訂閱,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一、主從同步下,發布訂閱功能是否能正常使用

1、開啟五個redis客戶端,其中兩個主節點,三個從節點

主節點2 訂閱configserver頻道

主節點3 訂閱configserver頻道

127.0.0.1:6379> subscribe configserver
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "configserver"
3) (integer) 1

從節點1 訂閱configserver頻道

從節點2 訂閱configserver頻道

從節點3 訂閱configserver頻道

127.0.0.1:6379> subscribe configserver
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "configserver"
3) (integer) 1

2、主節點一發送消息,測試其他節點能否收到訂閱

主節點發布 "test subscribe"消息

127.0.0.1:6379> publish configserver "test subscribe"
(integer) 2

主節點2 主節點3 打印

1) "message"
2) "configserver"
3) "test subscribe"

正常接收到消息

從節點1 從節點2 從節點3 打印

1) "message"
2) "configserver"
3) "test subscribe"

正常接收到消息

說明主從同步也一樣可以支持發布訂閱的功能。具體性能還需進一步測試。

二、發布訂閱性能測試

1、創建100個線程,訂閱test2

public class RedisSubScribeTask implements Runnable {
    private String Name;

    public RedisSubScribeTask(String name) {
        Name = name;
    }

    @Override
    public void run() {
        RedisDaoImpl redis = new RedisDaoImpl();
        redis.init();
        Jedis jedis = redis.pool.getResource();
        if (jedis != null) {
            RedisMsgSubListener redisMsgSubListener = new RedisMsgSubListener();
            System.out.println("線程" + Name + "啟動");
            jedis.subscribe(redisMsgSubListener, "test2");
        }
    }
}


public static void main(String[] args) {

    for (int i = 0; i <= 100; i++) {
        RedisSubScribeTask redisSubScribeTask = new RedisSubScribeTask(String.valueOf(i));
        new Thread(redisSubScribeTask).start();
    }

}
public class RedisMsgSubListener extends JedisPubSub {

    public void onMessage(String channel, String message) {
        System.out.println(channel + " is:" + message);
    }

    public void onPMessage(String pattern, String channel, String message) {
    }

    public void onSubscribe(String channel, int subscribedChannels) {
    }

    public void onUnsubscribe(String channel, int subscribedChannels) {
    }

    public void onPUnsubscribe(String pattern, int subscribedChannels) {
    }
    
}
2、定義main方法,發布消息
public static void main(String[] args) {
    RedisDaoImpl redis = new RedisDaoImpl();
    redis.init();
    redis.pool.getResource().publish("test2", "test");
}

3、測試結果為秒回

4、將線程改為300個,測試結果也為秒回

5、將連件數升為500,依舊沒有延遲

info clients
# Clients
connected_clients:500
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
127.0.0.1:6379>

6、連接數升為1000,其余兩個為主從同步。看是否存在延遲

info clients
# Clients
connected_clients:1002
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

7、發現依舊沒有延遲。并且主從同步的訂閱test2的消息,也正常接受。

127.0.0.1:6379> subscribe test2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "test2"
3) (integer) 1
1) "message"
2) "test2"
3) "test"
1) "message"
2) "test2"
3) "test"

8、針對1000個客戶端,并且進行連續發布100個消息

for (int i = 0; i <= 100; i++) {
 redis.pool.getResource().publish("test2", "test" + i);
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
 }

關于redis中怎么實現發布訂閱問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天台县| 苍山县| 曲水县| 滕州市| 新蔡县| 若羌县| 德昌县| 五原县| 滨州市| 长汀县| 万宁市| 佛坪县| 盱眙县| 宜春市| 思茅市| 丽江市| 资中县| 开江县| 昭平县| 衡阳市| 九江县| 灌南县| 江华| 达孜县| 苍南县| 化德县| 西吉县| 英德市| 鹤岗市| 长寿区| 古蔺县| 通化市| 铜梁县| 阿坝| 青岛市| 台北市| 厦门市| 孝感市| 佛坪县| 乐都县| 永吉县|