jedis实现订阅发布-publish/subscribe

来源:互联网 发布:淘宝 几次 五星 一个月 编辑:程序博客网 时间:2024/05/27 20:27

本文由larrylgq编写,转载请注明出处:http://blog.csdn.net/larrylgq/article/details/7395261

作者:吕桂强

邮箱:larry.lv.word@gmail.com



本例包括

jedis_demo:入口类

jedis_control:jedis控制器(jedis的连接池)

jedis_pub_sub_listener:订阅的监听器

singleton_agent:单例的代理类(连接池配置)

package com.larry.jedis;import redis.clients.jedis.Jedis;/** * 入口类 * @author 吕桂强 * @email larry.lv.word@gmail.com * @version 创建时间:2012-3-28 下午12:12:41 */public class jedis_demo {jedis_control redis_util = jedis_control.get_singleton();public static void main(String[] args) {jedis_demo jedis_demo = new jedis_demo();new Thread(new Runnable(){@Overridepublic void run() {jedis_control redis_util = jedis_control.get_singleton();Jedis jedis = redis_util.get_connection();jedis_pub_sub_listener pub_sub_listener = new jedis_pub_sub_listener();// 可以订阅多个频道// 订阅得到信息在lister的onMessage(...)方法中进行处理// jedis.subscribe(listener, "news.share", "news.log");// jedis.subscribe(listener, new String[]{"news.share","news.log"});jedis.psubscribe(pub_sub_listener, new String[] { "news.share" });// 使用模式匹配的方式设置频道}}).start();jedis_demo.publish();}/** * 发布 */public void publish() {Jedis jedis = redis_util.get_connection();  jedis.publish("news.share", "ok");  jedis.publish("news.share", "hello word"); }}

package com.larry.jedis;import redis.clients.jedis.Jedis;/** * jedis控制器 * @author 吕桂强 * @email larry.lv.word@gmail.com * @version 创建时间:2012-3-28 下午12:03:40 */public final class jedis_control {//单例private static jedis_control _jedis_control;public static jedis_control get_singleton(){if(_jedis_control == null){_jedis_control = new jedis_control();}return _jedis_control;}/**       * 获取连接实例        * @return jedis        */     public Jedis get_connection() {Jedis jedis = null;          try {              jedis = singleton_agent.get_jedispool().getResource();          } catch (Exception e) {              e.printStackTrace();          }          return jedis;      }   /**        * 释放数据库连接        * @param conn        */     public void close_connection(Jedis jedis) {          if (null != jedis) {              try {                  singleton_agent.get_jedispool().returnResource(jedis);              } catch (Exception e) {e.printStackTrace();              }          }      }  } 

package com.larry.jedis;import redis.clients.jedis.JedisPubSub;/** * 监听订阅事件 * @author 吕桂强 * @email larry.lv.word@gmail.com * @version 创建时间:2012-3-28 下午12:09:20 */public class jedis_pub_sub_listener extends JedisPubSub {// 取得订阅的消息后的处理public void onMessage(String channel, String message) {System.out.println(channel + "=" + message);}// 初始化订阅时候的处理public void onSubscribe(String channel, int subscribedChannels) {System.out.println(channel + "=" + subscribedChannels);}// 取消订阅时候的处理public void onUnsubscribe(String channel, int subscribedChannels) {System.out.println(channel + "=" + subscribedChannels);}// 初始化按表达式的方式订阅时候的处理public void onPSubscribe(String pattern, int subscribedChannels) {System.out.println(pattern + "=" + subscribedChannels);}// 取消按表达式的方式订阅时候的处理public void onPUnsubscribe(String pattern, int subscribedChannels) {System.out.println(pattern + "=" + subscribedChannels);}// 取得按表达式的方式订阅的消息后的处理public void onPMessage(String pattern, String channel, String message) {System.out.println(pattern + "=" + channel + "=" + message);}}

package com.larry.jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;/** * 所有单例的代理类 * @author 吕桂强 * @email larry.lv.word@gmail.com * @version 创建时间:2012-3-28 下午12:30:42 */public class singleton_agent {//****************单例一个连接池***************private static JedisPool jedispool = null;/**        * 获取连接池        * @return 数据源        */     public static JedisPool get_jedispool() {if(jedispool == null){JedisPoolConfig jedispool_config = new JedisPoolConfig();jedispool_config.maxActive = 20;jedispool_config.maxIdle = 0;jedispool_config.maxWait = 1000;jedispool_config.testOnBorrow = true;jedispool = new JedisPool(jedispool_config, "localhost", 6379);}return jedispool;     }//end****************单例一个连接池***************}




原创粉丝点击