redis的订阅功能有什么用
redis订阅功能可以用于消息的传输,是一种消息通信模式,Redis客户端可以订阅任意数量的频道,具体实现代码:
packagecom.hcmony.sword.redis;importorg.apache.commons.lang3.StringUtils;
importredis.clients.jedis.Jedis;
importredis.clients.jedis.JedisPool;
importredis.clients.jedis.JedisPubSub;
/**
*<h3>Shenjue.java基本描述</h3>
*/
publicclassRedisMQ{
privatestaticfinalStringTOPIC="TOPIC";
privatefinalJedisPooljedisPool;
publicRedisMQ(JedisPooljedisPool){
this.jedisPool=jedisPool;
}
/**
*发布消息
*@paramtopic
*@parammessge
*/
publicvoidpublish(Stringtopic,Stringmessge){
Jedisjedis=null;
if(StringUtils.isBlank(topic)){
topic=TOPIC;
}
try{
jedis=jedisPool.getResource();
jedis.publish(topic,messge);
}
finally{
if(null!=jedis){
jedis.close();
}
}
}
/**
*订阅消息
*@paramtopic
*@paramjedisPubSub
*/
publicvoidsubscribe(Stringtopic,JedisPubSubjedisPubSub){
Jedisjedis=null;
if(StringUtils.isBlank(topic)){
topic=TOPIC;
}
try{
jedis=jedisPool.getResource();
jedis.subscribe(jedisPubSub,topic);
}
finally{
if(null!=jedis){
jedis.close();
}
}
}
publicstaticvoidmain(String[]args){
//默认连接本地redis,
//loclhost:6379
JedisPooljedisPool=newJedisPool();
RedisMQpublish=newRedisMQ(jedisPool);
newThread(newRunnable(){
@Override
publicvoidrun(){
publish.subscribe("PID",newMyjedisPubSub());
}
}).start();
for(inti=0;i<100;i++){
publish.publish("PID","messge"+i);
}
}
publicstaticclassMyjedisPubSubextendsJedisPubSub{
@Override
publicvoidonMessage(Stringchannel,Stringmessage){
System.out.println("-------channelis"+channel+"messageis"+message);
}
}
}
版权声明
本文仅代表作者观点,不代表米安网络立场。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。