`

RedisManager

 
阅读更多
package com.hoss.common.cache;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import cn.sina.api.commons.util.StatLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.ZParams;
import redis.clients.jedis.exceptions.JedisException;
import cn.sina.api.commons.redis.jedis.JedisHAServer;
import cn.sina.api.commons.redis.jedis.JedisPort;

import com.hoss.common.config.SystemConfigFactory;
import com.hoss.common.config.SystemConfigService;
import com.hoss.common.model.CommonSystemConfig;
import com.hoss.common.util.SpringContextUtils;


public class RedisManager {
    private static Logger logger = LoggerFactory.getLogger("RedisManager");
    private static final JedisHAServer server = new JedisHAServer();

    private static JedisPort first;
    private static JedisPort second;
    private RedisManager() {
    }

    public static JedisHAServer getHaServer(){
        if( !server.isAlive() ){
            init();
        }
        return server;
    }

    /**
     * 初始化redis
     */
    private synchronized static void init(){
        if( !server.isAlive() ){
            StatLog.setPausePrint(true); //关闭redis监控日志打印
            try{
                SystemConfigService  systemConfigService= SpringContextUtils.getBean(SystemConfigService.class);
                String servers= systemConfigService.findSystemConfigValueByKeyFormDB(CommonSystemConfig.class, "redis");
                JedisPoolConfig jedisPoolConfig= new JedisPoolConfig();
                jedisPoolConfig.setTestWhileIdle(false);
                server.setPoolConfig(jedisPoolConfig);
                server.setServers(initialServerAddressesS(servers));
                server.setDoubleWrite(true);
                first = server.getFirst();
                second = server.getSecond();
                logger.info("初始化  redis server addr=" + servers);
            }catch (Exception e){
                e.printStackTrace();
                logger.error("初始化  redis server error");
            }
        }
    }

    private static List<String> initialServerAddressesS(String servers) {

        if(servers == null || servers.trim().length()<1){
            logger.warn("RedisManager init error servers is empty");
        }

        List<String> addrs = new ArrayList<String>();

        String[] hostIps = servers.split(",");
        System.out.println(hostIps.length);
        for (int i = 0; i < hostIps.length; i++) {
            addrs.add(hostIps[i]);
        }
        return addrs;
    }


    public static Long zadd(String key, double score, String member){
        Long result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zadd(key, score, member);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zadd(key, score, member);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zadd(key, score, member);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Long zadd(byte[] key, double score, byte member[]){
        Long result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zadd(key, score, member);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zadd(key, score, member);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zadd(key, score, member);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Long zunionstore(String dstkey, String... sets){
        Long result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zunionstore(dstkey, sets);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zunionstore(dstkey, sets);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zunionstore(dstkey, sets);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Long zunionstore(String dstkey, ZParams params, String... sets){
        Long result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zunionstore(dstkey,params, sets);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zunionstore(dstkey, params,sets);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zunionstore(dstkey, params, sets);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Long zunionstore(byte[] dstkey, byte[]... sets){
        Long result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zunionstore(dstkey, sets);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zunionstore(dstkey, sets);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zunionstore(dstkey, sets);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Long zunionstore(byte[] dstkey, ZParams params, byte[]... sets){
        Long result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zunionstore(dstkey,params, sets);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zunionstore(dstkey, params,sets);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zunionstore(dstkey, params, sets);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Long zrem(byte[] dstkey, byte[] sets){
        Long result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zrem(dstkey, sets);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zrem(dstkey, sets);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zrem(dstkey, sets);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Long zrem(String dstkey, String sets){
        Long result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zrem(dstkey, sets);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zrem(dstkey,sets);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zrem(dstkey, sets);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Set<String> zrange(String key, int start, int end){
        Set<String> result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zrange(key, start, end);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zrange(key, start, end);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zrange(key, start, end);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Set<byte[]> zrange(byte[] key, int start, int end){
        Set<byte[]> result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zrange(key, start, end);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zrange(key, start, end);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zrange(key, start, end);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Set<byte[]> zrevrange(byte[] key, int start, int end){
        Set<byte[]> result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zrevrange(key, start, end);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zrevrange(key, start, end);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zrevrange(key, start, end);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Set<String> zrevrange(String key, int start, int end){
        Set<String> result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zrevrange(key, start, end);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zrevrange(key, start, end);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zrevrange(key, start, end);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Set<String> zrangeByScore(String key, int min, int max){
        Set<String> result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zrangeByScore(key, min, max);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zrangeByScore(key, min, max);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zrangeByScore(key, min, max);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Set<byte[]> zrangeByScore(byte[] key, int start, int end){
        Set<byte[]> result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zrangeByScore(key, start, end);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                if (result != null) {
                    result = jedis.zrangeByScore(key, start, end);
                    second.getCustomPool().returnResource(jedis);
                }
            } else {
                result2 = jedis.zrangeByScore(key, start, end);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }



    public static double zincrby(byte[] key, double score, byte[] member){
        double result=0.0, result2=0.0;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zincrby(key, score, member);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                jedis.zincrby(key, score, member);
                second.getCustomPool().returnResource(jedis);
            } else {
                result2 = jedis.zincrby(key, score, member);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (Double.valueOf("0.000001").doubleValue() < result) {
            return result;
        }
        if (Double.valueOf("0.000001").doubleValue() < result2) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static double zincrby(String key, double score, String member){
        double result=0.0, result2=0.0;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.zincrby(key, score, member);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                jedis.zincrby(key, score, member);
                second.getCustomPool().returnResource(jedis);
            } else {
                result2 = jedis.zincrby(key, score, member);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (Double.valueOf("0.000001").doubleValue() < result) {
            return result;
        }
        if (Double.valueOf("0.000001").doubleValue() < result2) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

    public static Long expire(String key, int sec){
        Long result = null, result2 = null;
        Jedis jedis = null;
        if (first != null && first.isAlive()) {
            jedis = first.getCustomPool().getResource();
            result = jedis.expire(key, sec);
            first.getCustomPool().returnResource(jedis);
        }
        if (getHaServer().isDoubleWrite() && second != null && second.isAlive()) {
            jedis = second.getCustomPool().getResource();
            if (getHaServer().isSetSecond()) {
                result2 = jedis.expire(key, sec);
                second.getCustomPool().returnResource(jedis);
            } else {
                result2 = jedis.expire(key, sec);
            }
            second.getCustomPool().returnResource(jedis);
        }
        if (result != null) {
            return result;
        }
        if (result2 != null) {
            return result2;
        }
        throw new JedisException("redis server all dead: " + first + " " + second);
    }

}

package com.hoss.common.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
* 获取 spring bean 的工具类
* @author linxiaohui
*
*/
@Component
public class SpringContextUtils implements ApplicationContextAware {

    private static final Logger logger= LoggerFactory.getLogger(SpringContextUtils.class);

private static ApplicationContext context;

public void setApplicationContext(ApplicationContext context) throws BeansException {
SpringContextUtils.context = context;
        logger.info("---------SpringContextUtils 启动完成--------------------");
}
public static <T> T getBean(String beanId, Class<T> clazz) {
return context.getBean(beanId, clazz);
}

public static <T> T getBean(Class<T> clazz) {
return context.getBean(clazz);
}

public static ApplicationContext getContext() {
return context;
}
}

package com.hoss.common.config;

import com.hoss.common.exception.SystemConfigNotFoundException;

import java.util.List;

/**
* Created by linxiaohui on 14-5-20.
*/
public interface SystemConfigService {
    /**
     * 根据key获取 配置
     *      先从缓存服务器中获取,缓存服务器中不存在去数据库中获取(当 数据库中存在,缓存中不存在,同步到缓存)
     *
     * @param cls
     * @param key
     * @return
     */
    SystemConfigDto findSystemConfigByKey(Class<? extends SystemConfig> cls,String key) throws SystemConfigNotFoundException;
    /**
     * 根据key获取 配置
     *      从数据库中查询
     *
     * @param cls
     * @param key
     * @return
     */
    SystemConfigDto findSystemConfigByKeyFormDB(Class<? extends SystemConfig> cls,String key) throws SystemConfigNotFoundException;

    /**
     * 根据key获取 配置的数
     *      先从缓存服务器中获取,缓存服务器中不存在去数据库中获取(当 数据库中存在,缓存中不存在,同步到缓存)
     *
     * @param cls
     * @param key
     * @return
     */
    String findSystemConfigValueByKey(Class<? extends SystemConfig> cls,String key) throws SystemConfigNotFoundException;

    /**
     * 根据key获取 配置的数
     *      从数据库中查询
     *
     * @param cls
     * @param key
     * @return
     */
    String findSystemConfigValueByKeyFormDB(Class<? extends SystemConfig> cls,String key) throws SystemConfigNotFoundException;

    /**
     * 根据key获取 配置的数
     *      从数据库中查询(数据库中不存在,把默认值插入到数据库中)
     *
     * @param cls
     * @param key
     * @return
     */
    String findSystemConfigValueByKeyFormDB(Class<? extends SystemConfig> cls,String key,String defaultValue) ;

    /**
     * 从数据库中获取某一个类型的配置
     * @param cls
     * @return
     */
    List<SystemConfigDto> findAllFormDB(Class<? extends SystemConfig> cls);

    /**
     * 增加一个配置到数据库并同步到缓存服务器
     * @param systemConfig
     * @return
     */
    SystemConfigDto addSystemConfig(SystemConfig systemConfig);

    /**
     * 更新一个配置到数据库并同步到缓存服务器
     * @param systemConfig
     * @return
     */
    SystemConfigDto updateSystemConfig(SystemConfig systemConfig);



    /**
     * 增加一个配置到数据库
     * @param systemConfig
     * @return
     */
    void saveSystemConfig(SystemConfig systemConfig);


}

package com.hoss.common.model;

import com.hoss.common.config.SystemConfig;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

/**
* Created by linxiaohui on 14-5-20.
*/
@Entity
@DiscriminatorValue(value = "common_config")
public class CommonSystemConfig extends SystemConfig {
    public CommonSystemConfig(){

    }

    public CommonSystemConfig(String key,String value){
        super(key,value);
    }
}






分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics