• Redis工具类


    Redis引入jar包

    Redis工具类

    package net.wwwyibu.filter;
    
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import org.apache.log4j.Logger;
    import org.json.JSONException;
    
    import net.sf.json.JSONObject;
    import net.sf.json.JsonConfig;
    import net.sf.json.util.PropertySetStrategy;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    import redis.clients.jedis.JedisShardInfo;
    import redis.clients.jedis.ShardedJedis;
    import redis.clients.jedis.ShardedJedisPool;
    import redis.clients.jedis.Tuple;
    
    /**
     * @author 马家立
     * @version 创建时间:2020-7-29 16:54:56
     * @Description:TODO Redis工具类
     * @Description:TODO 菜鸟教程--https://www.runoob.com/redis/redis-tutorial.html
     * @Description:TODO w3cschool教程--https://www.w3cschool.cn/redis/redis-commands.html
     */
    public class RedisUtil {
        private static Logger log = Logger.getLogger(RedisUtil.class);
    
        /**
         * --获取redis的ip
         */
        private static String redisIp = getRedisIp();
    
        /**
         * --非切片客户端链接
         */
        private Jedis jedis;
        /**
         * --非切片链接池
         */
        private JedisPool jedisPool;
        /**
         * --切片客户端链接
         */
        private ShardedJedis shardedJedis;
        /**
         * --切片客户端链接池
         */
        private ShardedJedisPool shardedJedisPool;
    
        /**
         * --构造函数
         */
        public RedisUtil() {
            initialJedisPool();
            initialShardedJedisPool();
        }
    
        public Jedis getJedis() {
            if (jedis == null) {
                initialJedisPool();
            }
            return jedis;
        }
    
        public void setJedis(Jedis jedis) {
            this.jedis = jedis;
        }
    
        public ShardedJedis getShardedJedis() {
            if (shardedJedis == null) {
                initialShardedJedisPool();
            }
            return shardedJedis;
        }
    
        public void setShardedJedis(ShardedJedis shardedJedis) {
            this.shardedJedis = shardedJedis;
        }
        /**
         * @Title:getIp
         * @Description:TODO 获取redis的ip
         * @author:马家立
         * @date:2020-7-29 17:00:51
         * @return String
         */
        static String getRedisIp() {
            try {
                return InetAddress.getLocalHost().getHostAddress();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            return "127.0.0.1";
        }
    
    
        /**
         * @Title:initialJedisPool
         * @Description:TODO 初始化非切片客户端链接
         * @author:马家立
         * @date:2020-7-30 16:39:05 void
         */
        private void initialJedisPool() {
            // Jedis连接池配置
            JedisPoolConfig config = new JedisPoolConfig();
            /**
             * --控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
             * --最大连接数:如果赋值为-1,则表示不限制;如果pool已经分配了maxActive(最大连接数)个jedis实例,则此时pool的状态为exhausted(耗尽)。
             */
            config.setMaxActive(300);
            // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
            config.setMaxIdle(100);
            // 设置最大阻塞时间:表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
            config.setMaxWait(1000 * 5);
            // 在borrow(引入)一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
            config.setTestOnBorrow(false);
            jedisPool = new JedisPool(config, redisIp, 6379);
            setJedis(jedisPool.getResource());
        }
    
        /**
         * @Title:initialShardedJedisPool
         * @Description:TODO 初始化切片客户端链接
         * @author:马家立
         * @date:2020-7-30 16:39:29 void
         */
        private void initialShardedJedisPool() {
            // Jedis连接池配置
            JedisPoolConfig config = new JedisPoolConfig();
            /**
             * --控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
             * --最大连接数:如果赋值为-1,则表示不限制;如果pool已经分配了maxActive(最大连接数)个jedis实例,则此时pool的状态为exhausted(耗尽)。
             */
            config.setMaxActive(300);
            // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
            config.setMaxIdle(100);
            // 设置最大阻塞时间:表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
            config.setMaxWait(1000 * 5);
            // 在borrow(引入)一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
            config.setTestOnBorrow(false);
            // slave链接
            List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
            shards.add(new JedisShardInfo(redisIp, 6379));
            shardedJedisPool = new ShardedJedisPool(config, shards);
            setShardedJedis(shardedJedisPool.getResource());
        }
    
        /**
         * @Title:jedisMethod
         * @Description:TODO jedis相关方法
         * @author:马家立
         * @date:2020-7-30 16:53:10 void
         */
        public void jedisMethod() {
            jedis = getJedis();
            // 清空链接数据
            jedis.flushDB();
            jedis.echo("foo");
            // 交集
            System.out.println(jedis.sinter("" + "", "sets2"));
            // 并集
            System.out.println(jedis.sunion("sets1", "sets2"));
            // 差集
            System.out.println(jedis.sdiff("sets1", "sets2"));
            System.out.println(jedis.mset("mset1", "mvalue1", "mset2", "mvalue2", "mset3", "mvalue3", "mset4", "mvalue4"));
            System.out.println(jedis.mget("mset1", "mset2", "mset3", "mset4"));
            System.out.println(jedis.del(new String[] {"foo", "foo1", "foo3"}));
        }
        /**
         * @Description:TODO String类型开始
         */
        void String_Type_Start() {}
    
        /**
         * @Title:set
         * @Description:TODO 储存某个Key和值
         * @author:马家立
         * @date:2020-7-28 15:07:56
         * @param Key--存储的key
         * @param value--存储的值
         * @return boolean
         */
        public boolean set(String Key, String value) {
            try {
                getShardedJedis().set(Key, value);
                // 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                shardedJedisPool.returnBrokenResource(getShardedJedis());
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                // 否则调用returnResource()返回正常链接
                shardedJedisPool.returnResource(getShardedJedis());
                return false;
            }
        }
        
        /**
         * @Title:setex
         * @Description:TODO 存储某个Key和值并设置超时时间
         * @author:马家立
         * @date:2020-7-28 15:06:25
         * @param Key--存储的key
         * @param time--超时时间(秒)
         * @param value--存储的值
         * @return boolean
         */
        public boolean setex(String Key, int time, String value) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                jedis.setex(Key, time, value);
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:expire
         * @Description:TODO 设置 key 的过期时间,key 过期后将不再可用。单位以秒计。
         * @author:马家立
         * @date:2020-7-29 16:46:39
         * @param Key
         * @param time
         * @return boolean
         */
        public boolean expire(String Key, int time) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                // 设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。
                jedis.expire(Key, time);
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:setObject
         * @Description:TODO 存储某个Key和Object对象值
         * @author:马家立
         * @date:2020-7-28 15:14:12
         * @param key--存储的key
         * @param value--存储的Object对象值
         * @return boolean
         */
        public boolean setObject(String key, Object value) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                log.info("set = " + key + " 转化前 value=" + value);
                String objectJson = "";
                if ((value instanceof String) || (value instanceof JSONObject)) {// 如果传进来的是String或者JSONObject,不进行转换
                    objectJson = value + "";
                } else {// 是普通对象,进行beanToJson转化
                    JSONObject jsonObject = JSONObject.fromObject(value);
                    objectJson = jsonObject.toString();
                }
                log.info("Inkeys = " + key + " 转化后InValue=" + objectJson);
                jedis = getShardedJedis();
                jedis.set(key, objectJson);
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.info("setObject缓存方法出错");
                log.error(e.getMessage(), e);
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
        
        /**
         * @Title:get
         * @Description:TODO 获取某个key的value
         * @author:马家立
         * @date:2020-7-28 15:03:05
         * @param Key--redis存储的key
         * @return String
         */
        public String get(String Key) {
            String end = null;
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                end = jedis.get(Key);
                return end;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
        
        /**
         * @Title:getObject
         * @Description:TODO 获取某个key的对象value
         * @author:马家立
         * @date:2020-7-28 15:16:32
         * @param key----存储的key
         * @param clas--该key对应的对象值
         * @return Object
         */
        public Object getObject(String key, Class clas) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                String value = jedis.get(key);
                // 根据json字符串解析class对象
                return jsonToBean(value, clas);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.info("getObject缓存方法出错");
                log.error(e.getMessage(), e);
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:del
         * @Description:TODO 删除某个key
         * @author:马家立
         * @date:2020-7-28 18:07:36
         * @param Key--被删除的key
         * @return boolean
         */
        public boolean del(String Key) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                jedis.del(Key);
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:exists
         * @Description:TODO 判断某个key是否存在
         * @author:马家立
         * @date:2020-7-28 18:08:44
         * @param key--要判断的key
         * @return boolean
         */
        public boolean exists(String key) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                return jedis.exists(key);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
        
        /**
         * @Title:existsttl
         * @Description:TODO 给定 key 的剩余生存时间(单位:s)
         * @author:马家立
         * @date:2020-7-29 16:08:14
         * @param key
         * @return Long
         */
        public Long existsttl(String key) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                Long i = jedis.ttl(key);
                return i;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return -1L;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
        /**
         * @Description:TODO Hash类型开始
         */
        void Hash_Type_Start() {}
    
    
        /**
         * @Title:setHash
         * @Description:TODO 储存某个Key和hash对象值
         * @author:马家立
         * @date:2020-7-28 15:28:36
         * @param key--存储的key
         * @param map--存储的hash对象值
         * @return boolean
         */
        public boolean setHash(String key, Map<String, String> map) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                jedis.hmset(key, map);
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.info("setHash缓存方法出错");
                log.error(e.getMessage(), e);
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:setHashKey
         * @Description:TODO 储存某个Key中hash对象值中的key值:如果哈希表不存在,创建一个新的哈希表并进行 HSET操作;如果字段已经存在于哈希表中,旧值将被覆盖。
         * @author:马家立
         * @date:2020-7-28 15:29:56
         * @param key--存储的hash的key
         * @param inkey--hash对象中的key
         * @param value--hash对象中的key对应存储的值
         * @return boolean
         */
        public boolean setHashKey(String key, String inkey, String value) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                // 如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0
                jedis.hset(key, inkey, value);
                // jedis.disconnect();
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.info("setHash缓存方法出错");
                log.error(e.getMessage(), e);
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
        
        /**
         * @Title:hget
         * @Description:TODO 读取某个hash表中的某个key所对应的value值
         * @author:马家立
         * @date:2020-7-28 17:58:03
         * @param key--存储的hash的key
         * @param inkey--hash中的key
         * @return String
         */
        public String hget(String key, String inkey) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                return jedis.hget(key, inkey);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:hkeys
         * @Description:TODO 获取哈希表中的key
         * @author:马家立
         * @date:2020-7-28 18:00:44
         * @param key--存储的hash的key
         * @return Set<String>
         */
        public Set<String> hkeys(String key) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                return jedis.hkeys(key);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:hgetAll
         * @Description:TODO 获取哈希表中,所有的字段和值。
         * @author:马家立
         * @date:2020-7-29 16:33:24
         * @param key
         * @return Map<String,String>
         */
        public Map<String, String> hgetAll(String key) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                return jedis.hgetAll(key);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
        /**
         * @Title:delHash
         * @Description:TODO 删除哈希表 key中的一个或多个指定字段,不存在的字段将被忽略
         * @author:马家立
         * @date:2020-7-28 15:48:32
         * @param key--存储的hash的key
         * @param inkey--hash中的key
         * @return boolean
         */
        public boolean delHash(String key, String inkey) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                jedis.hdel(key, inkey);
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Description:TODO List类型开始
         */
        void List_Type_Start() {}
    
        /**
         * @Title:lpush
         * @Description:TODO 将一个或多个值插入到列表头部。 如果 key不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key存在但不是列表类型时,返回一个错误。
         * @author:马家立
         * @date:2020-7-29 16:16:34
         * @param Key
         * @param value
         * @return boolean
         */
        public boolean lpush(String Key, String value) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                // value可为数组
                jedis.lpush(Key, value);
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
    
        /**
         * 
         * @Title:rpush
         * @Description:TODO 将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。
         * @author:马家立
         * @date:2020-7-29 16:34:58
         * @param key
         * @param value
         * @return boolean
         */
        public boolean rpush(String key, String value) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                jedis.rpush(key, value);
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
    
        /**
         * @Title:lpop
         * @Description:TODO 移除并返回列表的第一个元素
         * @author:马家立
         * @date:2020-7-29 16:39:22
         * @param key
         * @return String 列表的第一个元素。 当列表 key 不存在时,返回 nil
         */
        public String lpop(String key) {
            String value = null;
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                value = jedis.lpop(key);
                return value;
            } catch (Exception e) {
                error = true;
                e.printStackTrace(); log.error(e.getMessage(), e);
                return value;
            } finally {
                if(jedis!=null){
                    if(shardedJedisPool!=null){
                        if(error){// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        }else{// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
    
        /**
         * @Title:rpop
         * @Description:TODO 移除并返回列表的最后一个元素
         * @author:马家立
         * @date:2020-7-29 16:39:22
         * @param key
         * @return String 列表的最后一个元素。 当列表 key 不存在时,返回 nil
         */
        public String rpop(String key) {
            String value = null;
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                value = jedis.rpop(key);
                return value;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return value;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
        
        /**
         * @Title:lrem
         * @Description:TODO 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
         * @Description:TODO COUNT 的值可以是以下几种:
         * @Description:TODO count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
         * @Description:TODO count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
         * @Description:TODO count = 0 : 移除表中所有与 VALUE 相等的值。
         * @author:马家立
         * @date:2020-7-29 16:27:09
         * @param Key
         * @param value
         * @return String
         */
        public String lrem(String Key, int count, String value) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                jedis.lrem(Key, count, value);
                return "0";
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return "-1";
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
    
        /**
         * @Title:lrange
         * @Description:TODO 读取某个key并以并返回start~end区间中的list数据
         * @author:马家立
         * @date:2020-7-29 16:19:08
         * @param Key
         * @param start
         * @param end
         * @return List<String>
         */
        public List<String> lrange(String Key, int start, int end) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                // 若jedis.lrange(Key, 0, -1)则返回list所有数据
                return jedis.lrange(Key, start, end);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
    
        /**
         * @Title:ltrim
         * @Description:TODO 保留指定区间内的元素,不在指定区间之内的元素都将被删除。
         * @author:马家立
         * @date:2020-7-29 16:23:39
         * @param Key
         * @param start
         * @param end
         * @return boolean
         */
        public boolean ltrim(String Key, int start, int end) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                /**
                 * -- 若jedis.lrange(Key, 0, -1)则返回list所有数据 --若命令执行成功时,返回 ok 。
                 */
                return "ok".equals(jedis.ltrim(Key, start, end)) ? true : false;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
    
        /**
         * @Title:getListSize
         * @Description:TODO 获取List的长度
         * @author:马家立
         * @date:2020-7-29 15:36:44
         * @param key
         * @return long
         */
        public long getListSize(String key) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            long length = 0L;
            try {
                jedis = getShardedJedis();
                length = jedis.llen(key);
                return length;
            } catch (Exception e) {
                error = true;
                log.error("llen error", e);
                return length;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
        }
    
        /**
         * @Title:queueExists
         * @Description:TODO 判断队列是否存在
         * @author:马家立
         * @date:2020-7-29 16:06:49
         * @param name
         * @return boolean
         */
        public boolean queueExists(String name) {
            if(exists(name)) {
                //key存在,获得长度
                return getListSize(name) > 0 ? true : false;
            }
            return false;
        }
    
        /**
         * @Description:TODO Set类型开始
         */
        void Set_Type_Start() {}
    
        /**
         * @Description:TODO Sorted Set类型开始
         */
        void SortedSet_Type_Start() {}
    
        /**
         * @Title:zadd
         * @Description:TODO 储存一个对象到Sorted-Sets
         * @author:马家立
         * @date:2020-7-28 16:02:54
         * @param key--存储的Set集合的key
         * @param score--分数
         * @param member--成员
         * @return boolean
         */
        public boolean zadd(String key, double score, String member) {
            log.info("zadd--------key:" + key + ",score:" + score + ",member:" + member);
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                Long end = jedis.zadd(key, score, member);
                log.info("zadd--------end jedis.zadd:" + end);
    
                return true;
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return false;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                    // jedis.disconnect();
                }
            }
        }
    
        /**
         * @Title:zrevrangeWithScores
         * @Description:TODO 从小到大取出Sorted-Sets
         * @author:马家立
         * @date:2020-7-28 16:06:31
         * @param key--存储的Set集合的key
         * @param start--开始分值
         * @param end--结束分值
         * @return Set<Tuple>
         */
        public Set<Tuple> zrevrangeWithScores(String key, int start, int end) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                // jedis.zrevrangeWithScores(key, 0, -1);0,-1:返回所有
                return jedis.zrevrangeWithScores(key, start, end);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:zrangeWithScores
         * @Description:TODO 从大到小取出Sorted-Sets
         * @author:马家立
         * @date:2020-7-28 16:43:27
         * @param key--存储的Set集合的key
         * @param start--开始分值
         * @param end--结束分值
         * @return Set<Tuple>
         */
        public Set<Tuple> zrangeWithScores(String key, int start, int end) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                // jedis.zrangeWithScores(key, 0, -1);0,-1:返回所有
                return jedis.zrangeWithScores(key, start, end);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:zrange
         * @Description:TODO 从小到大取出Sorted-Sets
         * @author:马家立
         * @date:2020-7-28 17:53:21
         * @param key--存储的Set集合的key
         * @param start--开始分值
         * @param end--结束分值
         * @return Set<String>
         */
        public Set<String> zrange(String key, int start, int end) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                return jedis.zrange(key, start, end);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:zrangeByScore
         * @Description:TODO 返回所有符合条件start < score <= end的成员;
         * @author:马家立
         * @date:2020-7-28 17:54:04
         * @param key--存储的Set集合的key
         * @param start--开始分值
         * @param end--结束分值
         * @return Set<String>
         */
        public Set<String> zrangeByScore(String key, Double start, Double end) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                return jedis.zrangeByScore(key, start, end);
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return null;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:zrem
         * @Description:TODO 从Sorted-Sets中移除的一个或多个成员,不存在的成员将被忽略。
         * @author:马家立
         * @date:2020-7-28 18:02:12
         * @param key--存储的Set集合的key
         * @param inkey--Set集合中的key
         * @return String
         */
        public String zrem(String key, String inkey) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                // 被成功移除的成员的数量,不包括被忽略的成员。
                System.out.println(jedis.zrem(key, inkey));
                return "0";
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return "-1";
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:zremrangebyscore
         * @Description:TODO 从Sorted-Sets 中移除指定分数(score)区间内的所有成员
         * @author:马家立
         * @date:2020-7-28 18:05:39
         * @param key--存储的Set集合的key
         * @param start--开始分值
         * @param end--结束分值
         * @return String
         */
        public String zremrangebyscore(String Key, Double start, Double end) {
    
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            try {
                jedis = getShardedJedis();
                System.out.println(jedis.zremrangeByScore(Key, start, end));
                return "0";
            } catch (Exception e) {
                error = true;
                e.printStackTrace();
                log.error(e.getMessage(), e);
                return "-1";
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
                // jedis.disconnect();
            }
        }
    
        /**
         * @Title:getsortedSetSize
         * @Description:TODO 获取Sorted Set的长度
         * @author:马家立
         * @date:2020-7-29 16:01:52
         * @param key--获取SortedSet集合的key
         * @return long
         */
        public long getSortedSetSize(String key) {
            ShardedJedis jedis = null;
            boolean error = false;// 标记缓存操作过程是否出现异常
            long length = 0L;
            try {
                jedis = getShardedJedis();
                length = jedis.zcard(key);
                return length;
            } catch (Exception e) {
                error = true;
                log.error("llen error", e);
                return length;
            } finally {
                if (jedis != null) {
                    if (shardedJedisPool != null) {
                        if (error) {// 如果操作过程出现异常,调用returnBrokenResource()返回有问题的链接
                            shardedJedisPool.returnBrokenResource(jedis);
                        } else {// 否则调用returnResource()正常返回链接
                            shardedJedisPool.returnResource(jedis);
                        }
                    }
                }
            }
    
        }
    
        /**
         * @Title:jsonToBean
         * @Description:TODO 根据json字符串解析class对象
         * @author:马家立
         * @date:2020-7-28 15:18:36
         * @param jsonString--json字符串
         * @param clas--class对象
         * @return Object
         */
        public static Object jsonToBean(String jsonString, Class<?> clas) {
            JSONObject jo = JSONObject.fromObject(jsonString);
            JsonConfig cfg = new JsonConfig();
            Map<String, Object> classMap = new HashMap<String, Object>();
            cfg.setClassMap(classMap);
            cfg.setRootClass(clas);
            cfg.setPropertySetStrategy(PropertySetStrategy.DEFAULT);
            return JSONObject.toBean(jo, cfg);
        }
    
        public static void main(String[] args) throws JSONException, IOException {
            // RedisUtil redis = new RedisUtil();
            // redis.setHashKey("yayaya", "1", "haha");
            // redis.setHashKey("yayaya", "2", "hehe");
            // redis.setHashKey("yayaya", "3", "lala");
            // // redis.expire("yayaya", 10);
            // Set<String> hgets = redis.hkeys("yayaya");
            // for (String string : hgets) {
            // String value = redis.hget("yayaya", string);
            // System.out.println("string:" + string + ",value:" + value);
            // }
            List<String> values = new ArrayList<String>();
            String[] ss = values.toArray(new String[values.size()]);
        }
    }
    RedisUtils
    I have a dream : Sandy beach B-J-N.
  • 相关阅读:
    phpstorm 中文版 支持BUG调试 IDE
    WINDOWS中设置计划任务执行PHP文件
    数据库 Navicat_Premium_11.0.10 破解版下载安装
    zend Studio10.6.2破解注册码
    zend Studio10.6.2 下载
    【jdbcTemplate】使用jdbcTemplate查询的三种回调
    【JDBC】向数据表插入数据时,自动获取生成的主键
    【转】JDBC为什么要使用PreparedStatement而不是Statement
    【Spring学习笔记-6】关于@Autowired与@Scope(BeanDefination.SCOPE_PROTOTYPE)
    【java基础学习-2--】关于Hashcode()的使用
  • 原文地址:https://www.cnblogs.com/mjtabu/p/14293104.html
Copyright © 2020-2023  润新知