zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    python-super方法
    python--mixin
    python中将输出写入文件
    一致性hash算法
    mysql之触发器trigger
    python内置函数
    python3.5+Django2.2+pymysql+mysql
    File "D:PythonPython37-32libsite-packagesdjangoviewsdebug.py", line 332, in get_traceback_html   t = DEBUG_ENGINE.from_string(fh.read())
    RuntimeError: You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to po
    python:面向对象
  • 原文地址:https://www.cnblogs.com/tianzhongshan/p/6650189.html
Copyright © 2011-2022 走看看