• RedisUtil,总结使用Redis的工具类


    package com.shd.core.util;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import com.shd.core.basebiz.dto.TempData;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    public class RedisUtil {
    
        private static JedisPool jedisPool;// 非切片连接池
        private static String maxTotal = RedisConfig.getProperty("redis.pool.maxTotal", "1000");
        private static String maxIdle = RedisConfig.getProperty("redis.pool.maxIdle", "100");
        private static String minIdle = RedisConfig.getProperty("redis.pool.minIdle", "50");
        private static String maxWaitMillis = RedisConfig.getProperty("redis.pool.maxWaitMillis", "10000");
        private static String testOnBorrow = RedisConfig.getProperty("redis.pool.testOnBorrow", "true");
        private static String testOnReturn = RedisConfig.getProperty("redis.pool.testOnReturn", "true");
        private static String testWhileIdle = RedisConfig.getProperty("redis.pool.testWhileIdle", "true");
        private static String ntper = RedisConfig
                .getProperty("redis.pool.numTestsPerEvictionRun", "50");
        private static String tberm = RedisConfig.getProperty(
                "redis.pool.timeBetweenEvictionRunsMillis","30000");
        private static String ip = RedisConfig.getProperty("redis.ip", "127.0.0.1");
        private static int port = Integer.parseInt(RedisConfig.getProperty("redis.port","6379"));
        private static int timeout = Integer.parseInt(RedisConfig.getProperty(
                "redis.timeout", "10000"));
        /**
         * 初始化连接池
         */
        private static void initialPool() {
            if (jedisPool == null) {
                JedisPoolConfig config = new JedisPoolConfig();
                config.setMaxTotal(Integer.parseInt(maxTotal));
                config.setMaxIdle(Integer.parseInt(maxIdle));
                config.setMinIdle(Integer.parseInt(minIdle));
                config.setMaxWaitMillis(Integer.parseInt(maxWaitMillis));
                config.setTestOnBorrow(Boolean.parseBoolean(testOnBorrow));
                config.setTestOnReturn(Boolean.parseBoolean(testOnReturn));
                config.setTestWhileIdle(Boolean.parseBoolean(testWhileIdle));
                config.setNumTestsPerEvictionRun(Integer.parseInt(ntper));
                config.setTimeBetweenEvictionRunsMillis(Integer.parseInt(tberm));
                jedisPool = new JedisPool(config, ip, port, timeout);
            }
        }
    
        /**
         * 从池中获取jedis实例
         * @return jedis实例
         */
        private/* synchronized */static Jedis getJedis() throws Exception {
            if (jedisPool == null) {
                initialPool();
            }
            Jedis jedis = null;
            if (jedisPool != null) {
                jedis = jedisPool.getResource();
            }
            return jedis;
        }
    
        /**
         * 存储字符串
         * @param redisKey 标识符(以“STR-”开头)          
         * @param val 字符串
         */
        public static void setString(String redisKey, String val) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.set(redisKey, val);
            } catch (Exception e) {
                returnResource(jedis);
            } finally {
                returnResource(jedis);
            }
        }
    
        /**
         * 根据标识符获取存储的字符串
         * @param redisKey 标识符
         * @return 存储的字符串
         */
        public static String getString(String redisKey) {
            if (!exists(redisKey)) {
                return null;
            }
            Jedis jedis = null;
            try {
                jedis = getJedis();
                String val = jedis.get(redisKey);
                return val;
            } catch (Exception e) {
                e.printStackTrace();
                returnResource(jedis);
            } finally {
                returnResource(jedis);
            }
            return null;
        }
    
        /**
         * 存储对象
         * @param redisKey 标识符(以“OBJ-”开头)
         * @param obj 对象(必须序列化,实现Serializable接口)
         */
        public static void setObject(String redisKey, Object obj) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                getJedis().set(redisKey.getBytes(), serialize(obj));
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
    
        /**
         * 根据标识符获取对象
         * @param redisKey 标识符
         * @return 对象(必须序列化,实现Serializable接口)
         */
        public static Object getObject(String redisKey) {
            if (!exists(redisKey)) {
                return null;
            }
            Jedis jedis = null;
            try {
                jedis = getJedis();
                byte[] byt = getJedis().get(redisKey.getBytes());
                Object obj = unserizlize(byt);
                return obj;
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return null;
        }
    
        /**
         * 存储list集合
         * @param redisKey 标识符(以“LIST-”开头)
         * @param list 集合
         * @param isCover 是否覆盖 
         *         true:覆盖 false:不覆盖,追加数据
         */
        public static void setList(String redisKey, List<Object> list,
                boolean isCover) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (isCover) {
                    jedis.del(redisKey);
                }
                for (Object object : list) {
                    jedis.rpush(redisKey.getBytes(), serialize(object));
                }
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
    
        /**
         * 添加对象到list集合
         * @param redisKey 标识符
         * @param Object 对象
         */
        public static void pushObjectToList(String redisKey, Object object) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.rpush(redisKey.getBytes(), serialize(object));
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
        /**
         * 根据标识符获取List集合
         * @param redisKey 标识符
         * @return list 集合
         */
        public static List<Object> popList(String redisKey) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (!exists(redisKey)) {
                    return null;
                }
                List<Object> list = new ArrayList<Object>();
                Long len = jedis.llen(redisKey);
                for (int i = 0; i < len; i++) {
                    byte[] byt = jedis.lpop(redisKey.getBytes());
                    Object obj = unserizlize(byt);
                    list.add(obj);
                }
                return list;
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return null;
        }
    
        /**
         * 根据标识符获取List集合
         * @param redisKey 标识符
         * @return list集合
         */
        public static List<Object> getList(String redisKey) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (!exists(redisKey)) {
                    return null;
                }
                List<Object> list = new ArrayList<Object>();
                Long len = jedis.llen(redisKey);
                for (int i = 0; i < len; i++) {
                    byte[] byt = jedis.lindex(redisKey.getBytes(), i);
                    Object obj = unserizlize(byt);
                    list.add(obj);
                }
                return list;
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return null;
        }
    
        /**
         * 根据标识符和List集合的下标获取对象
         * @param redisKey 标识符
         * @param index 下标(-1表示最后的下标)
         * @return 对象
         */
        public static Object getListObjectByIndex(String redisKey, int index) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (!exists(redisKey)) {
                    return null;
                }
                Long len = jedis.llen(redisKey);
                if (index >= len) {
                    return null;
                }
                byte[] byt = jedis.lindex(redisKey.getBytes(), index);
                Object obj = unserizlize(byt);
                return obj;
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
                return null;
            } finally {
                returnResource(jedis);
            }
    
        }
        /**
         * 根据标识符移除头部对象,并获取该对象
         * @param redisKey 标识符
         * @return 对象
         */
        public static Object popListObject(String redisKey) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (!exists(redisKey)) {
                    return null;
                }
                byte[] byt = jedis.lpop(redisKey.getBytes());
                Object obj = unserizlize(byt);
                return obj;
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return null;
        }
    
        /**
         * 根据标识符和List集合的起始位置、结束位置获取对象
         * @param redisKey 标识符
         * @param index 起始位置
         * @param index 结束为止(-1表示最后的位置)
         * @return 对象
         */
        public static List<Object> getListByRegion(String redisKey, int start,
                int end) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (!exists(redisKey)) {
                    return null;
                }
                List<Object> resultList = new ArrayList<Object>();
                List<byte[]> list = jedis.lrange(redisKey.getBytes(), start, end);
                for (byte[] byt : list) {
                    Object obj = null;
                    if (byt != null) {
                        obj = unserizlize(byt);
                    }
                    resultList.add(obj);
                }
                return resultList;
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return null;
        }
    
        /**
         * 移除count个object对象
         * @param redisKey 标识符
         */
        public static void delListObjects(String redisKey, Object object) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.lrem(redisKey.getBytes(), 1, serialize(object));
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
    
        /**
         * 保留区域类的元素,其他的删除
         * @param redisKey 标识符
         * @param start 起始位置
         * @param end 结束位置(-1)
         */
        public static void holdListObjectsInRegion(String redisKey, long start, long end) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.ltrim(redisKey.getBytes(), start, end);
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
        /**
         * 返回List的长度
         * @param redisKey redis标识符
         * @return 长度  key不存在,返回 0
         */
        public static long getListSize(String redisKey){
            Jedis jedis = null;
            try {
                jedis = getJedis();
                return jedis.llen(redisKey);
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return 0l;
        }
        /**
         * 存储Map集合
         * @param redisKey 标识符(以“HASH-”开头)
         * @param map 集合
         * @param isCover 是否覆盖 true:新数据 false:旧数据+新数据
         */
        public static void setHash(String redisKey, Map<String, Object> map,
                boolean isCover) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (isCover) {
                    jedis.del(redisKey);
                }
                Map<byte[], byte[]> hash = new HashMap<byte[], byte[]>();
                for (String mapKey : map.keySet()) {
                    Object object = map.get(mapKey);
                    byte[] byt = serialize(object);
                    hash.put(mapKey.getBytes(), byt);
                }
                jedis.hmset(redisKey.getBytes(), hash);
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
    
        /**
         * 添加某个键值对到缓存中
         * @param redisKey 缓存的标识符
         * @param mapKey  map的标识符
         * @param object 对象
         */
        public static void addObjectToHash(String redisKey, String mapKey,
                Object object) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                byte[] byt = serialize(object);
                jedis.hset(redisKey.getBytes(), mapKey.getBytes(), byt);
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
    
        /**
         * 根据标识符获取Map集合
         * @param redisKey 标识符
         * @return map集合
         */
        public static Map<String, Object> getHash(String redisKey) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (!exists(redisKey)) {
                    return null;
                }
                Map<String, Object> resultMap = new HashMap<String, Object>();
                Map<byte[], byte[]> map = jedis.hgetAll(redisKey.getBytes());
                for (byte[] byt : map.keySet()) {
                    String mapKey = new String(byt);
                    Object object = unserizlize(map.get(byt));
                    resultMap.put(mapKey, object);
                }
                return resultMap;
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return null;
        }
    
        /**
         * 根据标识符和集合的键获取存储的对象
         * @param redisKey 标识符
         * @param mapKey  集合的键
         * @return map存储的对象
         */
        public static Object getObjectByMapKey(String redisKey, String mapKey) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (!exists(redisKey)) {
                    return null;
                }
                List<byte[]> list = jedis.hmget(redisKey.getBytes(),
                        mapKey.getBytes());
                if (list != null && list.size() > 0 && list.get(0) != null) {
                    byte[] byt = list.get(0);
                    Object object = unserizlize(byt);
                    return object;
                }
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return null;
        }
    
        /**
         * 删除标识符存储的map恐吓中一个或多个键值
         * @param redisKey 标识符
         * @param mapKey map集合的键
         */
        public static void delMapByMapKey(String redisKey, String... mapKey) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.hdel(redisKey, mapKey);
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
        /**
         * 返回Map的长度
         * @param redisKey redis标识符
         * @return 长度  key不存在,返回 0
         */
        public static long getMapSize(String redisKey){
            Jedis jedis = null;
            try {
                jedis = getJedis();
                return jedis.hlen(redisKey);
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return 0l;
        }
        /**
         * 设置数据过多久过期(以最后一次设置为准)
         * @param redisKey redis标识符
         * @param seconds 秒 
         */
        public static void setExpireTime(String redisKey,int seconds){
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.expire(redisKey, seconds);
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
        /**
         * 获取数据的过期时间
         * @param redisKey redis标识符
         * @return 秒 -1:没设置 -2:数据不存在
         */
        public static Long getExpireTime(String redisKey){
            Jedis jedis = null;
            try {
                jedis = getJedis();
                Long time = jedis.ttl(redisKey);
                return time;
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return null;
        }
        /**
         * 判断标识符的是否存在
         * @param redisKey 标识符
         */
        public static boolean exists(String redisKey) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                return jedis.exists(redisKey);
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return false;
        }
    
        /**
         * 删除某些标识符的存储的数据
         * @param redisKey 标识符
         */
        public static void del(String... redisKey) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.del(redisKey);
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
    
        /**
         * 清空数据
         */
        public static void flush() {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.flushDB();
            } catch (Exception e) {
                returnResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
        }
    
        /**
         * 释放资源
         */
        public static void returnResource(Jedis jedis) {
            if (jedis != null) {
                jedis.close();
            }
        }
    
        /**
         * 对象序列化成字节数组
         * @param obj 对象(必须序列化,实现Serializable接口)
         * @return 字节数组
         */
        private static byte[] serialize(Object obj) {
            ObjectOutputStream obi = null;
            ByteArrayOutputStream bai = null;
            try {
                bai = new ByteArrayOutputStream();
                obi = new ObjectOutputStream(bai);
                obi.writeObject(obj);
                byte[] byt = bai.toByteArray();
                return byt;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 字节数组反序列化成对象
         * @param byt 字节数组
         * @return 对象(必须序列化,实现Serializable接口)
         */
        private static Object unserizlize(byte[] byt) {
            ObjectInputStream oii = null;
            ByteArrayInputStream bis = null;
            bis = new ByteArrayInputStream(byt);
            try {
                oii = new ObjectInputStream(bis);
                Object obj = oii.readObject();
                return obj;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        
        public static void main(String[] args) throws Exception {
            List<Object> list = new ArrayList<Object>();
            for (int i = 1; i < 10001; i++) {
                TempData t = new TempData();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
                Date date = sdf.parse("20180119210000");
                date.setSeconds(i);
                t.setCreateTime(date);
                System.out.println(sdf.format(date));
                
                t.setDataContent("temperature,20.00,"+sdf.format(date)
                        +";humidity,85.00,"+sdf.format(date)+";battery,12.67,"
                        +sdf.format(date)+";");
                t.setDataId(168755);
                t.setDataType(0);
                t.setIecTriggerType("010000");
                t.setLogicNodeCode("002_FILTH");
                t.setMdeviceid(800010120001l);
                t.setMobjectid(300020120003l);
                t.setMtypeid(42027846);
                list.add(t);
            }
            RedisUtil.setList("LIST-TEMPDATA-FILTH", list, true);
            System.out.println("数量:"+RedisUtil.getListSize("LIST-TEMPDATA-FILTH"));
        } 
        
        
    }
  • 相关阅读:
    易错小细节
    Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_GiftAnimationView"
    iOS 获取UIView 动画的实时位置的方法
    控制器跳转后看不到导航栏
    定时器显示礼物弹出的动画,不错的思路
    error===>ld: 2 duplicate symbols for architecture x86_64
    AppStore上传条例
    right here waiting的歌词
    Take my breath away
    Sailing
  • 原文地址:https://www.cnblogs.com/4AMLJW/p/redisUtils202004161427.html
Copyright © 2020-2023  润新知