jedis客户端,取redis服务的值

package com.common.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @ClassName: SerializeUtil
 * @Desc: 序列化、反序列化
 * @date 2014-8-20下午2:21:41
 */
public class SerializeUtil {
    /** 写日志文件 */
    public final static Logger logger = LoggerFactory.getLogger(SerializeUtil.class);

    /**
     * @Description: 序列化
     * @date 2013-9-14上午10:22:12
     * @param object
     * @return
     */
    public static byte[] serialize(Object object) {
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        try {
            // 序列化
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(object);
            byte[] bytes = baos.toByteArray();
            return bytes;
        } catch (Exception e) {
            logger.error("【异常提示信息】" + e);
        }
        return null;
    }

    /**
     * @Description: 反序列化
     * @date 2013-9-14上午10:22:25
     * @param bytes
     * @return
     */
    public static Object unSerialize(byte[] bytes) {
        ByteArrayInputStream bais = null;
        try {
            // 反序列化
            bais = new ByteArrayInputStream(bytes);
            ObjectInputStream ois = new ObjectInputStream(bais);
            return ois.readObject();
        } catch (Exception e) {
        }
        return null;
    }
}
package com.common.util.cache;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.util.Hashing;
import redis.clients.util.Sharded;

import com.common.util.SerializeUtil;

/**
 * @ClassName: JedisUtil
 * @Desc: jedis客户端,取redis服务的值
 * @date 2014-8-20下午2:16:06
 */
public class JedisUtil {
    // 写日志
    private static final Logger log = LoggerFactory.getLogger(JedisUtil.class);
    // 实例-单例模式
    private static JedisUtil dbClient;

    // ShardedJedisPool池
    private static ShardedJedisPool pool;

    // 初始化连接对象
    static {
        // 创建jedis池配置实例
        JedisPoolConfig config = new JedisPoolConfig();

        // 设置池配置项值
        // #jedis的最大分配对象#
        // config.setMaxActive(Integer.valueOf(ResourceProperty.createResourceProperty().getValue("jedis_pool_maxActive").trim()));
        // #jedis最大保存idel状态对象数 #
        config.setMaxIdle(Integer.valueOf(JedisProperty.newInstance().getValue(
                "jedis_pool_maxIdle")));
        // #jedis池没有对象返回时,最大等待时间 #
        config.setMaxWaitMillis(Long.valueOf(JedisProperty.newInstance()
                .getValue("jedis_pool_maxWait")));
        // #jedis调用borrowObject方法时,是否进行有效检查#
        config.setTestOnBorrow(Boolean.valueOf(true));
        // #jedis调用returnObject方法时,是否进行有效检查 #
        config.setTestOnReturn(Boolean.valueOf(true));
        // 根据配置实例化jedis池

        List<JedisShardInfo> jdsInfoList = new ArrayList<JedisShardInfo>(2);
        JedisShardInfo jedisShardInfo = new JedisShardInfo(JedisProperty
                .newInstance().getValue("redis.host"),
                Integer.valueOf(JedisProperty.newInstance().getValue(
                        "redis.port")));
        jdsInfoList.add(jedisShardInfo);
        pool = new ShardedJedisPool(config, jdsInfoList, Hashing.MURMUR_HASH,
                Sharded.DEFAULT_KEY_TAG_PATTERN);

    }

    /**
     * 
     * 获取客户端实例
     * 
     * @return dbClient instance
     */
    public synchronized static JedisUtil getInstance() {
        if (dbClient == null) {
            dbClient = new JedisUtil();
        }
        return dbClient;
    }

    /**
     * @Description: 保存对象(序列化)
     * @date 2014-8-10下午04:38:40
     * @param key
     * @param value
     */
    public void setObject(String key, Object value) {
        ShardedJedis jedis = null;
        if (key == null || value == null) {
            return;
        }
        byte[] val = SerializeUtil.serialize(value);
        try {
            // 从jedis池中获取一个jedis实例
            jedis = pool.getResource();
            jedis.set(key.getBytes(), val);
        } catch (Exception e) {
            log.error("【异常提示信息】" + e);
        } finally {
            // 释放对象池,即获取jedis实例使用后要将对象还回去
            if (jedis != null)
                pool.returnResource(jedis);
        }
    }

    /**
     * @Desc: 保存对象(序列化)
     * @date 2014-8-20下午4:33:03
     * @param key
     * @param value
     * @param expire
     */
    public void setObject(String key, Object value, int expire) {
        ShardedJedis jedis = null;
        if (key == null || value == null) {
            return;
        }
        byte[] val = SerializeUtil.serialize(value);
        try {
            // 从jedis池中获取一个jedis实例
            jedis = pool.getResource();
            jedis.set(key.getBytes(), val);
            jedis.expire(key, expire);
        } catch (Exception e) {
            log.error("【异常提示信息】" + e);
        } finally {
            // 释放对象池,即获取jedis实例使用后要将对象还回去
            if (jedis != null)
                pool.returnResource(jedis);
        }
    }

    /**
     * @Description: 获取对象(序列化)
     * @date 2014-8-10下午04:38:44
     * @param key
     * @return
     */
    public Object getObject(String key) {
        ShardedJedis jedis = null;
        
        try {
            // 从jedis池中获取一个jedis实例
            jedis = pool.getResource();
            // 获取jedis实例后可以对redis服务进行一系列的操作
            byte[] value = jedis.get(key.getBytes());
            Object data = SerializeUtil.unSerialize(value);
            return data;
        } catch (Exception e) {
            log.error("【异常提示信息】" + e);
        } finally {
            // 释放对象池,即获取jedis实例使用后要将对象还回去
            if (jedis != null)
                pool.returnResource(jedis);
        }
        return null;
    }

    /**
     * @Description: 获取String对象类型值
     * @date 2014-2-13上午10:00:44
     * @param key
     * @return
     */
    public String getString(String key) {
        ShardedJedis jedis = null;
        try {
            // 从jedis池中获取一个jedis实例
            jedis = pool.getResource();
            // 获取jedis实例后可以对redis服务进行一系列的操作
            String value = jedis.get(key);
            return value;
        } catch (Exception e) {
            log.error("【异常提示信息】" + e);
        } finally {
            // 释放对象池,即获取jedis实例使用后要将对象还回去
            if (jedis != null)
                pool.returnResource(jedis);
        }
        return null;
    }

    /**
     * @Description: 存入String对象值
     * @date 2014-8-13上午10:03:31
     * @param key
     * @param value
     */
    public void setString(String key, String value) {
        ShardedJedis jedis = null;
        try {
            // 从jedis池中获取一个jedis实例
            jedis = pool.getResource();
            jedis.set(key, value);
        } catch (Exception e) {
            log.error("【异常提示信息】" + e);
        } finally {
            // 释放对象池,即获取jedis实例使用后要将对象还回去
            if (jedis != null)
                pool.returnResource(jedis);
        }
    }

    /**
     * @Desc: 存入String对象值
     * @date 2014-8-20下午4:33:28
     * @param key
     * @param value
     * @param expire
     */
    public void setString(String key, String value, int expire) {
        ShardedJedis jedis = null;
        try {
            // 从jedis池中获取一个jedis实例
            jedis = pool.getResource();
            jedis.set(key, value);
            jedis.expire(key, expire);
        } catch (Exception e) {
            log.error("【异常提示信息】" + e);
        } finally {
            // 释放对象池,即获取jedis实例使用后要将对象还回去
            if (jedis != null)
                pool.returnResource(jedis);
        }
    }

    /**
     * @Desc: 删除缓存数据
     * @date 2014-8-20下午3:58:41
     * @param key
     * @return
     */
    public Integer deleteByKey(String key) {
        ShardedJedis jedis = null;
        try {
            jedis = pool.getResource();
            jedis.del(key);
            return 1;
        } catch (Exception e) {
            log.error("");
        } finally {
            if (jedis != null)
                pool.returnResource(jedis);
        }
        return 0;
    }

    /**
     * 
     * 描述:pop
     * @date 2015年6月24日下午6:26:37
     * @param key
     * @param isLeft
     * @return
     */
    private byte[] pop(String key, boolean isLeft) {
        ShardedJedis jedis = pool.getResource();
        boolean flag = false;
        byte[] values = null;
        try {
            if (isLeft) {
                values = jedis.lpop(key.getBytes());
            } else {
                values = jedis.rpop(key.getBytes());
            }
            flag = true;
        } catch (Exception e) {
            flag = false;
            log.error(e.getMessage(), e);
        } finally {
            release(flag, jedis);
        }
        return values;
    }

    /**
     * 
     * 描述:lpop
     * @date 2015年6月24日下午6:25:14
     * @param key
     * @return
     */
    public byte[] lpop(String key) {
        return pop(key, true);
    }

    /**
     * 
     * 描述:rpop
     * @date 2015年6月24日下午6:24:56
     * @param key
     * @return
     */
    public byte[] rpop(String key) {
        return pop(key, false);
    }

    /**
     * 
     * 描述:push
     * @date 2015年6月24日下午6:26:37
     * @param key
     * @param isLeft
     * @return
     */
    private Long push(boolean isLeft, String key, String... values) {
        ShardedJedis jedis = pool.getResource();
        boolean flag = false;
        Long len = null;
        try {
            if (isLeft) {
                len = jedis.lpush(key, values);
            } else {
                len = jedis.rpush(key, values);
            }
            flag = true;
        } catch (Exception e) {
            flag = false;
            log.error(e.getMessage(), e);
        } finally {
            release(flag, jedis);
        }
        return len;
    }

    /**
     * 
     * 描述:lpop
     * @date 2015年6月24日下午6:25:14
     * @param key
     * @return
     */
    public Long lpush(String key, String... values) {
        return push(true, key, values);
    }

    /**
     * 
     * 描述:rpop
     * @date 2015年6月24日下午6:24:56
     * @param key
     * @return
     */
    public Long rpush(String key, String... values) {
        return push(false, key, values);
    }

    /**
     * 
     * 描述:回收jedis客户端
     * @date 2015年6月24日下午6:24:15
     * @param isNormal
     *            是否正常
     * @param jedis
     *            jedis
     */
    private void release(boolean isNormal, ShardedJedis jedis) {
        if (isNormal)
            pool.returnResource(jedis);
        else {
            pool.returnBrokenResource(jedis);
        }
    }

    /**
     * 
     * 描述:rpop lpush
     * @date 2015年6月24日下午6:28:21
     * @param scrKey
     * @param dstKey
     * @return
     */
    public byte[] rpoplpush(String scrKey, String dstKey) {
        ShardedJedis jedis = pool.getResource();
        boolean flag = false;
        byte[] ret = null;
        try {
            Jedis j = jedis.getShard(scrKey + dstKey);
            ret = j.rpoplpush(scrKey.getBytes(), dstKey.getBytes());
            flag = true;
        } catch (Exception e) {
            flag = false;
            log.error(e.getMessage(), e);
        } finally {
            release(flag, jedis);
        }
        return ret;
    }
    
    

    /**
     * 
     * 描述:length
     * @date 2015年6月24日下午6:58:37
     * @param key
     * @param value
     * @return
     */
    public Long length(String key) {
        ShardedJedis jedis = null;
        boolean flag = false;
        Long result = 0l;
        try {
            // 从jedis池中获取一个jedis实例
            jedis = pool.getResource();
            result = jedis.llen(key);
            flag = true;
        } catch (Exception e) {
            flag = false;
            log.error("【异常提示信息】" + e);
        } finally {
            release(flag, jedis);
        }

        return result;
    }
    
    /**
     * 
     * 描述:存入MAP集合数据(专用)
     * @date 2016年12月6日上午11:54:04
     * @param key
     * @param map
     */
    public void hmset(String key,Map<String,String> map){
        ShardedJedis jedis = null;
        boolean flag = false;
        try {
            // 从jedis池中获取一个jedis实例
            jedis = pool.getResource();
            jedis.hmset(key, map);
            // 24小时失效
            jedis.expire(key, 24*60*60);
            flag = true;
        } catch (Exception e) {
            flag = false;
            log.error("【异常提示信息】",e);
        } finally {
            release(flag, jedis);
        }
    }
    
    /**
     * 
     * 描述:获取map中的值
     * @date 2016年12月6日下午12:02:01
     * @param key,redis key
     * @param fields,map key
     * @return map value
     */
    public List<String> hmget(String key, String... fields){
        ShardedJedis jedis = null;
        List<String> data = null;
        boolean flag = false;
        try {
            // 从jedis池中获取一个jedis实例
            jedis = pool.getResource();
            data = jedis.hmget(key, fields);
            flag = true;
        } catch (Exception e) {
            flag = false;
            log.error("【异常提示信息】",e);
        } finally {
            release(flag, jedis);
        }
        return data;
    }
    
}

 ==================================================

    public void init() {
        if (status.compareAndSet(false, true)) {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxIdle(poolMaxIdle);
            config.setMaxWaitMillis(poolMaxWait);
            // #jedis调用borrowObject方法时,是否进行有效检查#
            config.setTestOnBorrow(Boolean.valueOf(true));
            // #jedis调用returnObject方法时,是否进行有效检查 #
            config.setTestOnReturn(Boolean.valueOf(true));
            List<JedisShardInfo> jdsInfoList = new ArrayList<JedisShardInfo>(clusterAddress.size());
            Iterator<HostAndPort> it = clusterAddress.iterator();
            while (it.hasNext()) {
                HostAndPort home = it.next();
                it.remove();
                JedisShardInfo info = new JedisShardInfo(home.getHost(), home.getPort());
                jdsInfoList.add(info);
            }
            shardeJedisPool = new ShardedJedisPool(config, jdsInfoList, Hashing.MURMUR_HASH,
                    Sharded.DEFAULT_KEY_TAG_PATTERN);
            if (asyncLoad) {
                template = new SimpleJedisTemplate(shardeJedisPool, status);
            } else {
                template = new SimpleJedisTemplate(shardeJedisPool);
            }
            LOGGER.info("init jedsHolder finished ...!");
        }
    }


    <bean class="com.busp.common.util.cache.redis.JedisHolder"
        init-method="init" destroy-method="dispose" factory-method="custom">
        <property name="poolMaxIdle" value="${jedis_pool_maxIdle}" />
        <property name="poolMaxWait" value="${jedis_pool_maxWait}" />
        <property name="asyncLoad" value="true" />
        <property name="clusterAddress">
            <list>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg index="0" value="${redis.host}" />
                    <constructor-arg index="1" value="${redis.port}" />
                </bean>
            </list>
        </property>
    </bean>
原文地址:https://www.cnblogs.com/tianzhongshan/p/6650189.html