您的位置:首页 > 数据库 > Redis

(一)redis发布订阅

2018-01-11 15:32 357 查看
一、创建Jedis客户端

package redis.v1.client.server;

import redis.clients.jedis.Jedis;

public enum RedisClient {

Clent;

private static Jedis jedis = null;

public static Jedis getJedis() {
if(jedis == null) {
jedis = new Jedis("127.0.0.1",6379);
jedis.auth("619868");
}
return jedis;
}
}


二、创建消息订阅和发布监听器类

package redis.v1.client.listener;

import redis.clients.jedis.JedisPubSub;

public class RedisMsgPubSubListener extends JedisPubSub{

/**
* 接收订阅通道发来的消息
* @param channel 通道名称
* @param message 消息
*/
@Override
public void onMessage(String channel, String message){
System.out.println("onMessage---"+channel+"---"+message);
}
@Override
public void onPMessage(String pattern, String channel, String message){
System.out.println("onPMessage---"+pattern+"---"+channel+"---"+message);
}
/**
* 订阅通道信息
* @param channel 订阅的通道名
* @subscribedChannels 订阅的通道数量
*/
@Override
public void onSubscribe(String channel, int subscribedChannels){
System.out.println("onSubscribe---"+channel+"---"+subscribedChannels);
}
/**
* 取消订阅的通道
* @param 通道名
* @param 剩余通道数量
*/
@Override
public void onUnsubscribe(String channel, int subscribedChannels){
System.out.println("onUnsubscribe---"+channel+"---"+subscribedChannels);
}
@Override
public void onPUnsubscribe(String pattern, int subscribedChannels){
System.out.println("onPUnsubscribe---"+pattern+"---"+subscribedChannels);
}
/**
* 订阅信息通道(使得客户端订阅指定模式的频道,支持glob风格的模式)
* @param pattern 通道名称或者正则匹配表达式
* @param subscribedChannels 通道数量
*/
@Override
public void onPSubscribe(String pattern, int subscribedChannels){
System.out.println("onPSubscribe---"+pattern+"---"+subscribedChannels);
}
/**
* 监听通过PING命令测试客户端和服务端的联通行是否有效
* @param pattern 测试通道名称或者正则匹配的模式
*/
@Override
public void onPong(String pattern){
System.out.println("onPong"+"---"+pattern);
}
}


三、创建初始化消息监听器类

package redis.v1.client.common;

import redis.v1.client.listener.RedisMsgPubSubListener;

public class PubSubCommons {

public static RedisMsgPubSubListener listener = null;

static {
listener = new RedisMsgPubSubListener();
}
}


四、创建订阅通道启动类,下面代码订阅了三个通道redisChat、redisChat1、redisChat2

\package redis.v1.client;

import java.util.Iterator;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
import redis.v1.client.common.PubSubCommons;
import redis.v1.client.listener.RedisMsgPubSubListener;
import redis.v1.client.server.RedisClient;
import redis.v1.client.thread.UnsubscribeRunable;

public class RedisSubscribe {

public static void main(String[] args) {
Jedis jedis = RedisClient.getJedis();
System.out.println("订阅服务器运行状态:"+jedis.ping());

String[] str = {"redisChat","redisChat1","redisChat2"};
jedis.subscribe(PubSubCommons.listener, str);
//		jedis.close();
}
}


五、创建发布消息到通道的客户端类

package redis.v1.client;

import java.util.Iterator;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
import redis.v1.client.common.PubSubCommons;
import redis.v1.client.listener.RedisMsgPubSubListener;
import redis.v1.client.server.RedisClient;

public class RedisPSubscribe {

public static void main(String[] args) {
Jedis jedis = RedisClient.getJedis();
System.out.println("发布服务器运行状态:"+jedis.ping());

try {
Thread.sleep(1000*1);
jedis.publish("redisChat".getBytes(), "---redisChat发送消息...".getBytes());
Thread.sleep(1000*3);
jedis.publish("redisChat1".getBytes(), "---redisChat1发送消息...".getBytes());
Thread.sleep(1000*5);
jedis.publish("redisChat2".getBytes(), "---redisChat2发送消息...".getBytes());

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//		jedis.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: