91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

青田县| 蒲城县| 皋兰县| 贵南县| 抚顺县| 云阳县| 时尚| 崇义县| 上犹县| 广昌县| 成都市| 阳江市| 东明县| 松溪县| 垣曲县| 达日县| 内黄县| 黄陵县| 阜阳市| 湄潭县| 财经| 简阳市| 锦州市| 贡嘎县| 卢湾区| 广宁县| 泸定县| 新绛县| 乌兰察布市| 句容市| 南城县| 杭州市| 东阳市| 正蓝旗| 靖江市| 定襄县| 望奎县| 门头沟区| 文化| 盐山县| 富宁县|