jedis实现订阅发布-publish/subscribe

这个文章写的不好,我在项目中已经优化过了,但是参考的是这一篇。


本例包括

jedis_demo:入口类

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

jedis_pub_sub_listener:订阅的监听器

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

[java]  view plain copy
  1. package com.larry.jedis;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4.   
  5. /** 
  6.  * 入口类 
  7.  * @author 吕桂强 
  8.  * @email larry.lv.word@gmail.com 
  9.  * @version 创建时间:2012-3-28 下午12:12:41 
  10.  */  
  11. public class jedis_demo {  
  12.     jedis_control redis_util = jedis_control.get_singleton();  
  13.       
  14.     public static void main(String[] args) {  
  15.         jedis_demo jedis_demo = new jedis_demo();  
  16.           
  17.         new Thread(new Runnable(){  
  18.             @Override  
  19.             public void run() {  
  20.                 jedis_control redis_util = jedis_control.get_singleton();  
  21.                 Jedis jedis = redis_util.get_connection();  
  22.                 jedis_pub_sub_listener pub_sub_listener = new jedis_pub_sub_listener();  
  23.                 // 可以订阅多个频道  
  24.                 // 订阅得到信息在lister的onMessage(...)方法中进行处理  
  25.                 // jedis.subscribe(listener, "news.share", "news.log");  
  26.                 // jedis.subscribe(listener, new String[]{"news.share","news.log"});  
  27.                 jedis.psubscribe(pub_sub_listener, new String[] { "news.share" });// 使用模式匹配的方式设置频道  
  28.             }  
  29.         }).start();  
  30.           
  31.         jedis_demo.publish();  
  32.     }  
  33.   
  34.     /** 
  35.      * 发布 
  36.      */  
  37.     public void publish() {  
  38.         Jedis jedis = redis_util.get_connection();    
  39.         jedis.publish("news.share""ok");    
  40.         jedis.publish("news.share""hello word");   
  41.     }  
  42. }  

[java]  view plain copy
  1. package com.larry.jedis;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4.   
  5. /** 
  6.  * jedis控制器 
  7.  * @author 吕桂强 
  8.  * @email larry.lv.word@gmail.com 
  9.  * @version 创建时间:2012-3-28 下午12:03:40 
  10.  */  
  11. public final class jedis_control {  
  12.     //单例  
  13.     private static jedis_control _jedis_control;  
  14.     public static jedis_control get_singleton(){  
  15.         if(_jedis_control == null){  
  16.             _jedis_control = new jedis_control();  
  17.         }  
  18.         return _jedis_control;  
  19.     }  
  20.       
  21.     /**       
  22.      * 获取连接实例        
  23.      * @return jedis        
  24.      */       
  25.     public Jedis get_connection() {  
  26.         Jedis jedis = null;            
  27.         try {                
  28.             jedis = singleton_agent.get_jedispool().getResource();            
  29.         } catch (Exception e) {                
  30.             e.printStackTrace();            
  31.         }            
  32.         return jedis;        
  33.     }     
  34.       
  35.     /**        
  36.      * 释放数据库连接        
  37.      * @param conn        
  38.      */       
  39.     public void close_connection(Jedis jedis) {            
  40.         if (null != jedis) {                
  41.             try {                    
  42.                 singleton_agent.get_jedispool().returnResource(jedis);                
  43.             } catch (Exception e) {  
  44.                     e.printStackTrace();                
  45.             }            
  46.         }        
  47.     }    
  48. }   

[java]  view plain copy
  1. package com.larry.jedis;  
  2.   
  3. import redis.clients.jedis.JedisPubSub;  
  4.   
  5. /** 
  6.  * 监听订阅事件 
  7.  * @author 吕桂强 
  8.  * @email larry.lv.word@gmail.com 
  9.  * @version 创建时间:2012-3-28 下午12:09:20 
  10.  */  
  11. public class jedis_pub_sub_listener extends JedisPubSub {  
  12.     // 取得订阅的消息后的处理  
  13.     public void onMessage(String channel, String message) {  
  14.         System.out.println(channel + "=" + message);  
  15.     }  
  16.   
  17.     // 初始化订阅时候的处理  
  18.     public void onSubscribe(String channel, int subscribedChannels) {  
  19.         System.out.println(channel + "=" + subscribedChannels);  
  20.     }  
  21.   
  22.     // 取消订阅时候的处理  
  23.     public void onUnsubscribe(String channel, int subscribedChannels) {  
  24.         System.out.println(channel + "=" + subscribedChannels);  
  25.     }  
  26.   
  27.     // 初始化按表达式的方式订阅时候的处理  
  28.     public void onPSubscribe(String pattern, int subscribedChannels) {  
  29.         System.out.println(pattern + "=" + subscribedChannels);  
  30.     }  
  31.   
  32.     // 取消按表达式的方式订阅时候的处理  
  33.     public void onPUnsubscribe(String pattern, int subscribedChannels) {  
  34.         System.out.println(pattern + "=" + subscribedChannels);  
  35.     }  
  36.   
  37.     // 取得按表达式的方式订阅的消息后的处理  
  38.     public void onPMessage(String pattern, String channel, String message) {  
  39.         System.out.println(pattern + "=" + channel + "=" + message);  
  40.     }  
  41. }  

[java]  view plain copy
  1. package com.larry.jedis;  
  2. import redis.clients.jedis.JedisPool;  
  3. import redis.clients.jedis.JedisPoolConfig;  
  4.   
  5. /** 
  6.  * 所有单例的代理类 
  7.  * @author 吕桂强 
  8.  * @email larry.lv.word@gmail.com 
  9.  * @version 创建时间:2012-3-28 下午12:30:42 
  10.  */  
  11. public class singleton_agent {  
  12.     //****************单例一个连接池***************  
  13.     private static JedisPool jedispool = null;  
  14.     /**         
  15.      * 获取连接池         
  16.      * @return 数据源         
  17.      */       
  18.     public static JedisPool get_jedispool() {  
  19.         if(jedispool == null){  
  20.             JedisPoolConfig jedispool_config = new JedisPoolConfig();  
  21.             jedispool_config.maxActive = 20;  
  22.             jedispool_config.maxIdle = 0;  
  23.             jedispool_config.maxWait = 1000;  
  24.             jedispool_config.testOnBorrow = true;  
  25.             jedispool = new JedisPool(jedispool_config, "localhost"6379);  
  26.         }  
  27.         return jedispool;       
  28.     }  
  29.     //end****************单例一个连接池***************  
  30. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值