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台虚机连接,这样的性能是足够知足咱们的业务场景的。
基本能实现毫秒级配置更新。