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中怎么实现发布订阅问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/3694479/blog/3073405