redisパブリケーションとサブスクリプション

2726 ワード


 
 
パブリケーション:publish例:publish mychannel hello 2015戻り値0サブスクライバなし戻り値1サブスクライバがあることを示す
購読:subscribe例:subscribe mychannel[....]戻り値は3つ:1)「message」固定書き方2)「channel」固定書き方3)「パブリッシャーが発表した情報」
購読解除:unsubscribe例:unsubscribe[channel]
ルールに従って購読:psubscribe例:psubscribe channel?チャンネル1などにマッチできるパブリッシャー
ルールに従ってサブスクリプションをキャンセルする:punsubscribe注意:punsubscribeコマンドを使用するとpsubsscribeでサブスクリプションしたルールのみがサブスクリプションされ、subscribeで直接サブスクリプションしたルールはサブスクリプションできません.
 
このパブリケーション購読機能を使用して、Webサイトの情報を購読者にプッシュする機能を実現することができます.大体のコードは以下の通りです.
package bj.zm.redis;

import org.junit.Test;

import redis.clients.jedis.Jedis;
/**
 *     
 * @author Administrator
 *
 */
public class TestPub {
	/**
	 *     
	 */
	@Test
	public void test(){
		Jedis jedis = new Jedis("192.168.1.110", 6379);
		jedis.publish("zmchannel", "hello 2015");
		
	}

}





    :


package cn.crxy.redis.test;

import java.util.Set;

import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
/**
 *     
 * @author Administrator
 *
 */
public class TestSub {
	@Test
	public void test(){
		Jedis jedis = new Jedis("192.168.1.170", 6379);
		final Jedis jedis2 = new Jedis("192.168.1.170", 6379);
		JedisPubSub jedisPubSub = new JedisPubSub() {
			
			@Override
			public void onUnsubscribe(String channel, int subscribedChannels) {
				System.out.println("    ");
			}
			
			@Override
			public void onSubscribe(String channel, int subscribedChannels) {
				System.out.println("    ");
			}
			
			@Override
			public void onPUnsubscribe(String pattern, int subscribedChannels) {
				
			}
			
			@Override
			public void onPSubscribe(String pattern, int subscribedChannels) {
				
			}
			
			@Override
			public void onPMessage(String pattern, String channel, String message) {
				
			}
			
			@Override
			public void onMessage(String channel, String message) {
				/*if(message.equals("quit")){
					this.unsubscribe();
				}*/
				Set<String> set = jedis2.smembers("set");
				/**
				 * Email.sendil(set,message);
				 */
				System.out.println(message);
			}
		};
		jedis.subscribe(jedisPubSub , "crxy");
		
	}

}