1. 程式人生 > >redis的訊息訂閱/釋出總結

redis的訊息訂閱/釋出總結

本地測試redis的pub/sub功能,本地主要是redis的缺陷,服務重啟時會丟失資訊的問題。發現redis的pub/sub功能還是比較薄弱,對於大量訊息佇列來說,不太合適,捨棄掉



import redis.clients.jedis.JedisPubSub;


public class RedisMsgPubSubListener extends JedisPubSub {
    @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 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) {
    	 System.out.println("onPMessage==="+"channel:" + channel + "   pub message :" + message+"  pattern:"+pattern);
    }

    @Override
    public void onSubscribe(String channel, int subscribedChannels) {
        System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);
    }

    @Override
    public void onPUnsubscribe(String pattern, int subscribedChannels) {
    	System.out.println("pattern:" + pattern + "is been unPSubscribeed:" + subscribedChannels);
    }

    @Override
    public void onPSubscribe(String pattern, int subscribedChannels) {
    	System.out.println("pattern:" + pattern + "is been PSubscribeed:" + subscribedChannels);
    }

    @Override
    public void onUnsubscribe(String channel, int subscribedChannels) {
        System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);
    }
}

import org.junit.Test;

import redis.clients.jedis.Jedis;

public class TestPublish {
	
	@Test
    public void testPublish() throws Exception{
        Jedis jedis = new Jedis("api.dev.lexue.com",16479);
        jedis.auth("[email protected]");
        jedis.publish("redisChatTest", "我是天才");
        Thread.sleep(5000);
        jedis.publish("redisChatTest", "我牛逼");
        Thread.sleep(5000);
        jedis.publish("redisChatTest", "哈哈");
    }
}

import org.junit.Test;

import redis.clients.jedis.Jedis;

public class TestSubscribe {
	
    public static void main(String args[]) throws Exception{
		Jedis jedis = new Jedis("api.dev.lexue.com",16479);
        jedis.auth("[email protected]");
        RedisMsgPubSubListener listener = new RedisMsgPubSubListener();
        jedis.subscribe(listener, "redisChatTest");
        System.out.println("test sub");
        //other code
       
    }
}

    @RequestMapping(value = "/testPublish")
    public void testPublish(HttpServletRequest request, HttpServletResponse response)throws Exception{
        response.setContentType("text/javascript");
        Jedis jedis = new Jedis("api.dev.lexue.com",16479);
        jedis.auth("[email protected]");
        jedis.publish("redisChatTest", "1111111");
        jedis.publish("redisChatTest1", "咦咦咦咦咦");
        LOG.info("testPublish  1");
        Thread.sleep(5000);
        jedis.publish("redisChatTest", "2222222");
        jedis.publish("redisChatTest1", "鵝鵝鵝鵝鵝鵝");
        LOG.info("testPublish  2");
        Thread.sleep(5000);
        jedis.publish("redisChatTest", "33333333");
        jedis.publish("redisChatTest1", "哈哈哈哈哈哈");
        LOG.info("testPublish  3");
    } 
    
    @RequestMapping(value = "/testSubscribe1")
    public void testSubscribe1(HttpServletRequest request, HttpServletResponse response)throws Exception{
        response.setContentType("text/javascript");
        Jedis jedis = new Jedis("api.dev.lexue.com",16479);
        jedis.auth("[email protected]");
        RedisMsgPubSubListener listener = new RedisMsgPubSubListener();
        jedis.psubscribe(listener, "redisChatTest*");
//        jedis.subscribe(listener, "redisChatTest1");
        LOG.info("testSubscribe1");
    }
    
    @RequestMapping(value = "/testSubscribe2")
    public void testSubscribe2(HttpServletRequest request, HttpServletResponse response)throws Exception{
        response.setContentType("text/javascript");
        Jedis jedis = new Jedis("api.dev.lexue.com",16479);
        jedis.auth("[email protected]");
        RedisMsgPubSubListener listener = new RedisMsgPubSubListener();
        jedis.subscribe(listener, "redisChatTest1");
        LOG.info("testSubscribe2");
    }

參考地址:http://blog.csdn.net/u011734144/article/details/51782085

相關推薦

redis訊息訂閱/釋出總結

本地測試redis的pub/sub功能,本地主要是redis的缺陷,服務重啟時會丟失資訊的問題。發現redis的pub/sub功能還是比較薄弱,對於大量訊息佇列來說,不太合適,捨棄掉 import redis.clients.jedis.JedisPubSub;

Nosql-redis事務/訊息訂閱/釋出/主從複製

Redis事務: Redis事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。  Redis事務的主要作用就是串聯多個命令防止別的命令插隊 Multi、Exec、discard: 從輸入Mul

redis 訊息佇列 釋出訂閱模式

向佇列中放入元素命令  lpush key value1 value2 value3,rpush  key value1 value2 value3; 從佇列中取元素命令  lpop  key;rpo

_029_Redis_訊息訂閱釋出

1. 定義 程序間的一種訊息通訊模式:傳送者(pub)傳送訊息,訂閱者(sub)接收訊息。 2. 訂閱/訊息釋出圖   3. 命令  4 案例  5  例項1 //Subsribe message 127.0.0.

spring---訊息訂閱釋出之RabbiteMQ

上一篇文章我們使用spring + redis實現訊息的訂閱釋出,但是redis作為訊息元件僅適合輕量級的任務處理,例如:秒殺計數器、快取等,對於重量級,高併發的處理redis就稍顯劣勢。接下來我們spring+RabbiteMQ的實現。 準備 首先安裝Er

使用Spring Data Redis 實現訂閱/釋出

Redis Redis是一個key-value的儲存系統,提供的key-value的資料介面,其效能非常的出色,一般常用作快取使用,但是其除了可以作為快取之外,自身也提供了一套訂閱/釋出的系統。 Spring Data Redis Spring Dat

java基於redis訂閱/釋出訊息實現聊天室功能

一、引言 趁著國慶節把redis高階應用都寫完吧,其實都很簡單。 redis高階應用:安全性、事務處理、持久化操作,訂閱/釋出、虛擬記憶體 安全性其實就是在連線redis時,需要一個密碼認證,可以

redis 訊息釋出訂閱訊息佇列

redis可以實現訊息的釋出訂閱,可以用作java中的訂閱釋出模式 純粹redis的釋出訂閱  redis客戶端1中使用命令 SUBSCRIBE talk 可以訂閱通道 talk上的訊息  redis客戶端2中也同樣執行這個命令一起訂閱通道 talk  redis客

Spring Boot使用Redis進行訊息釋出訂閱

今天來學習如何利用Spring Data對Redis的支援來實現訊息的釋出訂閱機制。釋出訂閱是一種典型的非同步通訊模型,可以讓訊息的釋出者和訂閱者充分解耦。在我們的例子中,我們將使用StringRedisTemplate來發佈一個字串訊息,同時基於MessageListe

Spring MVC + redis 訊息訂閱釋出

釋出訂閱(pub/sub)是一種訊息通訊模式,主要的目的是解耦訊息釋出者和訊息訂閱者之間的耦合,這點和設計模式中的觀察者模式比較相似。pub /sub不僅僅解決釋出者和訂閱者直接程式碼級別耦合也解決兩者在物理部署上的耦合。redis作為一個pub/sub server,在

spring-redis實現訊息生產者釋出和消費者訂閱

前提是你已經有一個可執行的redis的demo,直接上核心redis配置檔案: <!-- redis服務配置 開始--> <bean class="redis.clients.jedis.JedisPoolConfig" id="poolConfig"&g

redis訊息釋出訂閱的運用與常見錯誤解決方法

  本文Redis所在系統:Linux,詳細安裝步驟可參考:https://www.cnblogs.com/zhaoyan001/p/6143170.html   本文運用程式所在系統:windows7 一 win7 CRT下 redis的常用命令:

使用Spring-Redis實現訊息釋出/訂閱

Redis伺服器可以實現簡單的訊息“釋出/訂閱”服務,下面對spring-redis實現做一個說明 spring-redis使用RedisMessageListenerContainer進行訊息監聽,客戶程式需要自己實現MessageListener,並以指定的topic

基於Redis訊息訂閱釋出應用場景

目錄 基於Redis訊息的訂閱釋出應用場景 1.應用背景 2.困境 2.1 鎖表風險 2.2 實時性差 2.3 增加程式設計複雜性 2.4 實時效果

redis 訂閱/釋出

  本系列已經過半了,這一篇我們來看看redis好玩的釋出訂閱模式,其實在很多的MQ產品中都存在這樣的一個模式,我們常聽到的一個例子 就是郵件訂閱的場景,什麼意思呢,也就是說100個人訂閱了你的部落格,如果博主發表了文章,那麼100個人就會同時收到通知郵件,除了這個 場景還能找到其他場

Redis管道和釋出訂閱

管道:原子性執行命令 ''' redis-py預設在執行每次請求都會建立(連線池申請連線)和斷開(歸還連線池)一次連線操作, 如果想要在一次請求中指定多個命令,則可以使用pipline實現一次請求指定多個命令, 並且預設情況下一次pipline 是原子性操作 ''' import redis poo

Redis常用技術-----釋出訂閱

銀行卡消費的時候,銀行往往會通過微信、簡訊或郵件通知使用者交易的詳細資訊,這便是釋出訂閱模式。 我們可以使用下面的命令進行模擬 先開啟一個客戶端1,輸入命令 SUBSCRIBE chat 表示客戶端1訂閱一個名為chat的渠道,之後開啟客戶端2,輸入命令 pub

Linux 安裝redis 基本配置 釋出訂閱,安全配置,持久化 rdb ,aof centos下redis安全相關

redis redis相關配置 1.yum  原始碼 rpm  yum 快速,間接,高效,解決依賴關係,(自動安裝到某個路徑,不可控),通過yum安裝的軟體查詢命令  rpm -ql nginx  yum源的軟體包可能版本非常低  

Redis學習(八) Redis丟失訂閱訊息分析與處理和client-output-buffer-limit屬性配置說明

Redis快取行情資料,發現程式執行一段時間後,出現subscribe執行緒不再能夠接收到訂閱的行情資料,發現是由Redis的輸出緩衝機制導致的。 Redis為了解決輸出緩衝區訊息大量堆積的隱患,設定了一些保護機制,主要採用兩種限制措施: 大小限制,當某一客戶端緩衝區超過設定值後直接關

(五)RabbitMQ訊息佇列-安裝amqp擴充套件並訂閱/釋出Demo(PHP版)

本文將介紹在PHP中如何使用RabbitMQ來實現訊息的訂閱和釋出。我使用的系統依然是Centos7,為了方便,應用伺服器我使用Docker進行部署,容器環境:centos7+nginx+php5.6。 執行環境,安裝AMQP擴充套件: 如何安裝Docker我就不說了,網上很多教程非