十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
redis中怎么实现发布订阅,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联于2013年成立,先为萨尔图等服务建站,萨尔图等地企业,进行企业商务咨询服务。为萨尔图企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
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中怎么实现发布订阅问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。