一、导入jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
二、发布者
注:在java中加入代码,mychannel为订阅标识,isOk为发送内容
注:升级:使用spring-data-redis.jar包工具redisTemplate方法发送
JedisPool jedisPool = new JedisPool();
Jedis resource = jedisPool.getResource();
resource.publish("mychannel", "isOk");
三、订阅者(接收者)
package cn.sky999.util.redis;
import static cn.sky999.util.webSocket.WebSocketTest.webSocketMap;
import java.io.IOException;
import redis.clients.jedis.JedisPubSub;
/**
* @author Timor
*
*/
public class Subscriber extends JedisPubSub {
public Subscriber(){
}
@Override
public void onMessage(String channel, String message) {
// TODO Auto-generated method stub
super.onMessage(channel, message);
//接收到的消息内容channel=mychannel, message=isOk
System.out.println(channel+" "+message);
}
@Override
public void onSubscribe(String channel, int subscribedChannels) {
// TODO Auto-generated method stub
super.onSubscribe(channel, subscribedChannels);
System.out.println(2);
}
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
// TODO Auto-generated method stub
super.onUnsubscribe(channel, subscribedChannels);
System.out.println(3);
}
}
四、将订阅者加入线程
注:channel 设置成上面设置的订阅标识mychannel
package cn.sky999.util.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* @author Timor
*
*/
public class SubThread extends Thread {
private final JedisPool jedisPool;
private final Subscriber subscriber = new Subscriber();
private final String channel = "mychannel";
public SubThread(JedisPool jedisPool) {
super("SubThread");
this.jedisPool = jedisPool;
}
@Override
public void run() {
System.out.println(String.format("subscribe redis, channel %s, thread will be blocked", channel));
Jedis jedis = null;
try {
jedis = jedisPool.getResource(); //取出一个连接
jedis.subscribe(subscriber, channel); //通过subscribe 的api去订阅,入参是订阅者和频道名
} catch (Exception e) {
System.out.println(String.format("subsrcibe channel error, %s", e));
} finally {
if (jedis != null) {
jedis.close();
}
}
}
}
五、启动线程
注:正式项目放到监听器中
public static void main(String[] args) {
// 连接redis服务端
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379);
System.out.println(String.format("redis pool is starting, redis ip %s, redis port %d", "127.0.0.1", 6379));
SubThread subThread = new SubThread(jedisPool); //订阅者
subThread.start();
}
六、特别注意
没啦,启动线程就没了