亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

克东县| 左贡县| 邻水| 新竹市| 和顺县| 手游| 马公市| 宜州市| 嘉禾县| 辽宁省| 尉犁县| 济南市| 子长县| 突泉县| 衡阳县| 离岛区| 西城区| 定兴县| 汾阳市| 漳平市| 桃源县| 香格里拉县| 霍州市| 九江市| 绥滨县| 宁武县| 石嘴山市| 西乡县| 平江县| 天镇县| 甘德县| 甘孜县| 嘉荫县| 花莲市| 义马市| 曲周县| 元谋县| 锦州市| 莎车县| 抚顺市| 奉节县|