redis發(fā)布訂閱策略

背景

多個(gè)客戶端client1、client2、client3訂閱redis服務(wù),當(dāng)redis服務(wù)有修改時(shí),將修改內(nèi)容發(fā)布至訂閱的客戶端。

實(shí)現(xiàn)方案

1.定義實(shí)現(xiàn)抽象類JedisPubSub的RedisMsgPubSubListener

Jedis定義了抽象類JedisPubSub,在這個(gè)類中,定義publish/subsribe的回調(diào)方法。通過(guò)繼承JedisPubSub類并重新實(shí)現(xiàn)這些回調(diào)方法,當(dāng)publish/subsribe事件發(fā)生時(shí),我們可以定制自己的處理邏輯。

public class RedisMsgPubSubListener extends JedisPubSub {    
public RedisMsgPubSubListener() {        super();    }    
@Override    
public void unsubscribe() {        super.unsubscribe();    }    
@Override    
public void unsubscribe(String... channels) {        super.unsubscribe(channels);    }    
@Override    
public void subscribe(String... channels) {        super.subscribe(channels);    }    
@Override    
public void psubscribe(String... patterns) {        super.psubscribe(patterns);    }    
@Override    
public void punsubscribe() {        super.punsubscribe();    }    
@Override    
public void punsubscribe(String... patterns) {        super.punsubscribe(patterns);    }    
@Override    
public boolean isSubscribed() {        return super.isSubscribed();    }    
@Override    
public void proceedWithPatterns(Client client, String... patterns) {        super.proceedWithPatterns(client, patterns);    }    
@Override    
public void proceed(Client client, String... channels) {        super.proceed(client, channels);    }    
@Override    
public int getSubscribedChannels() {        return super.getSubscribedChannels();    }    
@Override   
 public void onMessage(String channel, String message) {        System.out.println("channel:" + channel + "receives message :" + message);        //this.unsubscribe();    }    
@Override    
public void onPMessage(String pattern, String channel, String message) {    }    
@Override    
public void onSubscribe(String channel, int subscribedChannels) {        System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);    }    
@Override    
public void onUnsubscribe(String channel, int subscribedChannels) {        System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);    }   
@Override    
public void onPUnsubscribe(String pattern, int subscribedChannels) {    }    
@Override    
public void onPSubscribe(String pattern, int subscribedChannels) {    }}

單元測(cè)試

訂閱測(cè)試

@Testpublic void sub1Test(){    
Jedis jedis = new Jedis("localhost");    
RedisMsgPubSubListener listener = new RedisMsgPubSubListener();    
listener.subscribe("redisChatTest");   
 jedis.subscribe(listener, "redisChatTest");
}

發(fā)布測(cè)試

@Test
public void pubTest() throws Exception{    
Jedis jedis = new Jedis("localhost");    
jedis.publish("redisChatTest", "我是天才");   
 jedis.publish("redisChatTest", "我牛逼");    
jedis.publish("redisChatTest", "哈哈");
}

輸出結(jié)果

輸出結(jié)果.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,932評(píng)論 25 709
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)、高可擴(kuò)展、高可用、大數(shù)據(jù)存儲(chǔ)問(wèn)題而產(chǎn)生的數(shù)據(jù)庫(kù)解決方...
    克魯?shù)吕?/span>閱讀 5,714評(píng)論 0 36
  • 才華會(huì)枯竭 容貌會(huì)衰老 錢會(huì)花光 經(jīng)歷也會(huì)從財(cái)富變成拖住腳步的負(fù)累 所以要是你愛(ài)一個(gè)人 要去愛(ài)他的那顆心和大腦 感...
    Abbyyyyyy666閱讀 243評(píng)論 0 0
  • 實(shí)不相瞞,單身時(shí)候的自己是個(gè)有點(diǎn)不注重生活秩序和細(xì)節(jié)的人。說(shuō)白一點(diǎn),就是有些邋遢。 我不像跟多女生那樣,會(huì)每天都掃...
    夏至未眠閱讀 2,412評(píng)論 7 16

友情鏈接更多精彩內(nèi)容