ip服務器 | redis版本 | 是否主從 |
---|---|---|
10.29.190.24 | 4.0.8 | 是/主節點 |
10.28.36.205 | 4.0.8 | 是/從節點 |
環境如上,已經自建了兩臺redis,而且已經實現主從同步。java
一、開啓五個redis客戶端,其中兩個主節點,三個從節點redis
主節點2 訂閱configserver頻道服務器
主節點3 訂閱configserver頻道ide
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頻道ui
從節點3 訂閱configserver頻道spa
127.0.0.1:6379> subscribe configserver
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "configserver"
3) (integer) 1線程
二、主節點一發送消息,測試其餘節點可否收到訂閱code
主節點發布 "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"
正常接收到消息
說明主從同步也同樣能夠支持發佈訂閱的功能。具體性能還需進一步測試。
一、建立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) { } }
二、定義main方法,發佈消息
public static void main(String[] args) { RedisDaoImpl redis = new RedisDaoImpl(); redis.init(); redis.pool.getResource().publish("test2", "test"); }
三、測試結果爲秒回
四、將線程改成300個,測試結果也爲秒回
五、將連件數升爲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> |
六、鏈接數升爲1000,其他兩個爲主從同步。看是否存在延遲
info clients # Clients connected_clients:1002 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 |
七、發現依舊沒有延遲。而且主從同步的訂閱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"
八、針對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(); // } } |
從節點徹底打印完成大概耗時2s,性能還算能夠。
1) "message"
2) "test2"
3) "test99"
1) "message"
2) "test2"
3) "test100"
八、按照如今redis三個區部署,每一個區大概60臺虛機連接,這樣的性能是足夠知足咱們的業務場景的。
基本能實現毫秒級配置更新。