redis中怎么實(shí)現(xiàn)發(fā)布訂閱,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)于2013年成立,先為薩爾圖等服務(wù)建站,薩爾圖等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為薩爾圖企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
1、開(kāi)啟五個(gè)redis客戶端,其中兩個(gè)主節(jié)點(diǎn),三個(gè)從節(jié)點(diǎn)
主節(jié)點(diǎn)2 訂閱configserver頻道
主節(jié)點(diǎn)3 訂閱configserver頻道
127.0.0.1:6379> subscribe configserver
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "configserver"
3) (integer) 1
從節(jié)點(diǎn)1 訂閱configserver頻道
從節(jié)點(diǎn)2 訂閱configserver頻道
從節(jié)點(diǎn)3 訂閱configserver頻道
127.0.0.1:6379> subscribe configserver
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "configserver"
3) (integer) 1
2、主節(jié)點(diǎn)一發(fā)送消息,測(cè)試其他節(jié)點(diǎn)能否收到訂閱
主節(jié)點(diǎn)發(fā)布 "test subscribe"消息
127.0.0.1:6379> publish configserver "test subscribe"
(integer) 2
主節(jié)點(diǎn)2 主節(jié)點(diǎn)3 打印
1) "message"
2) "configserver"
3) "test subscribe"
正常接收到消息
從節(jié)點(diǎn)1 從節(jié)點(diǎn)2 從節(jié)點(diǎn)3 打印
1) "message"
2) "configserver"
3) "test subscribe"
正常接收到消息
說(shuō)明主從同步也一樣可以支持發(fā)布訂閱的功能。具體性能還需進(jìn)一步測(cè)試。
1、創(chuàng)建100個(gè)線程,訂閱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 + "啟動(dòng)");
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方法,發(fā)布消息
public static void main(String[] args) {
RedisDaoImpl redis = new RedisDaoImpl();
redis.init();
redis.pool.getResource().publish("test2", "test");
}3、測(cè)試結(jié)果為秒回
4、將線程改為300個(gè),測(cè)試結(jié)果也為秒回
5、將連件數(shù)升為500,依舊沒(méi)有延遲
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、連接數(shù)升為1000,其余兩個(gè)為主從同步。看是否存在延遲
info clients # Clients connected_clients:1002 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 |
7、發(fā)現(xiàn)依舊沒(méi)有延遲。并且主從同步的訂閱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、針對(duì)1000個(gè)客戶端,并且進(jìn)行連續(xù)發(fā)布100個(gè)消息
for (int i = 0; i <= 100; i++) {
redis.pool.getResource().publish("test2", "test" + i);
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
} |
關(guān)于redis中怎么實(shí)現(xiàn)發(fā)布訂閱問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
文章標(biāo)題:redis中怎么實(shí)現(xiàn)發(fā)布訂閱
新聞來(lái)源:http://www.chinadenli.net/article38/gicipp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、ChatGPT、域名注冊(cè)、網(wǎng)站策劃、響應(yīng)式網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)