redis utils写法
首页 > 后端开发    作者:StanWind   2016年9月24日 8:58 星期六   热度:1116°   百度已收录  
时间:2016-9-24 8:58   热度:1116° 
package pw.goyd.db;

import pw.goyd.game.constant.setting.ServerSetting;
import pw.goyd.game.server.ServerLog;
import pw.goyd.subscribe.Publisher;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;

/**
 * Jedis池管理 和 订阅
 * @author StanWind
 *
 */
public final class RedisUtil implements ServerSetting{
    private static JedisPool jedisPool = null;
    private static Publisher pub = null;
    
    
    /**
     * 初始化Redis连接池
     */
    static {
        try {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxActive(MAX_ACTIVE);
            config.setMaxIdle(MAX_IDLE);
            config.setMaxWait(MAX_WAIT);
            config.setTestOnBorrow(TEST_ON_BORROW);
            //无密码
            jedisPool = new JedisPool(config, R_ADDR, R_PORT, TIMEOUT);
            //jedisPool = new JedisPool(config, R_ADDR, R_PORT, TIMEOUT, R_AUTH);
            
             
            //订阅 获取客户端    
            pub = new Publisher();    
            pub.publish(getJedis()); //发布一个频道
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
//    /**
//     * 获取JedisPool 用来新建Jedis对象
//     * @return JedisPool
//     */
//    private static JedisPool getJedisPool(){
//     return jedisPool;
//    }
    
    /**
     * 发布消息
     */
    public static void publishData(final byte[] channel,final byte[] data){
    Jedis j = getJedis();
    if(j!=null){
    pub.publish(j,channel,data);
    returnResource(j);//释放资源
    }else{
    ServerLog.getLogger().info("Jedis对象不足");
    }
    }
    /**
     * 发布房间消息
     * @param channel
     * @param data
     */
    public static void pubRoom(final int roomID,final byte[] data){
    Jedis j = getJedis();
    if(j!=null){
    pub.publish(j,("room."+roomID).getBytes(),data);
    returnResource(j);//释放资源
    }else{
    ServerLog.getLogger().info("Jedis对象不足");
   
    }
    }
    
    
    /**
     * 获取Jedis实例
     * @return
     */
    public synchronized static Jedis getJedis() {
        int timeoutCount = 0;  
        while (true) {  
            try {  
                if (null != jedisPool) {  
                    return jedisPool.getResource();  
                }  
            } catch (Exception e) {  
                if (e instanceof JedisConnectionException) {  
                    timeoutCount++;  
                    ServerLog.getLogger().warn("getJedis timeoutCount={}", timeoutCount);  
                    if (timeoutCount > 3) {  
                        break;  
                    }  
                } else {  
                ServerLog.getLogger().error("GetJedis error,", e);  
                  break;  
                }  
            }  
            break;  
        }  
        return null;  
    }
    
    /**
     * 释放jedis资源
     * @param jedis
     */
    public static void returnResource(final Jedis jedis) {
        if (jedis != null) {
            jedisPool.returnResource(jedis);
        }
    }
}
二维码加载中...
本文作者:StanWind      文章标题: redis utils写法
本文地址:https://www.stanwind.com/post/13
版权声明:若无注明,本文皆为“Make it Better”原创,转载请保留文章出处。

返回顶部    首页    手机版本    后花园  
版权所有:Make it Better    站长: StanWind    赣ICP备17014296号   360网站安全检测平台  
00:00 / 00:00
随机播放