美文网首页
使用Redis存取数据

使用Redis存取数据

作者: chuan_bai | 来源:发表于2018-01-27 20:24 被阅读90次
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>
    
    
            <dependency>
                <groupId>commons-pool</groupId>
                <artifactId>commons-pool</artifactId>
                <version>1.6</version>
            </dependency>
    
    public final class RedisPool {
        //Redis服务器IP
        private static String ADDR = "127.0.0.1";
        //Redis的端口号
        private static Integer PORT = 6380;
        //访问密码
        private static String AUTH = "123456";
    
        //可用连接实例的最大数目,默认为8;
        //如果赋值为-1,则表示不限制,如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
        private static Integer MAX_TOTAL = -1;
        //控制一个pool最多有多少个状态为idle(空闲)的jedis实例,默认值是8
        private static Integer MAX_IDLE = 200;
        //等待可用连接的最大时间,单位是毫秒,默认值为-1,表示永不超时。
        //如果超过等待时间,则直接抛出JedisConnectionException
        private static Integer MAX_WAIT_MILLIS = 10000;
        private static Integer TIMEOUT = 10000;
        //在borrow(用)一个jedis实例时,是否提前进行validate(验证)操作;
        //如果为true,则得到的jedis实例均是可用的
        private static Boolean TEST_ON_BORROW = true;
        private  static JedisPool jedisPool = null;
    
        /**
         * 静态块,初始化Redis连接池
         */
        static {
            try {
                JedisPoolConfig config = new JedisPoolConfig();
            /*注意:
                在高版本的jedis jar包,比如本版本2.9.0,JedisPoolConfig没有setMaxActive和setMaxWait属性了
                这是因为高版本中官方废弃了此方法,用以下两个属性替换。
                maxActive  ==>  maxTotal
                maxWait==>  maxWaitMillis
             */
                config.setMaxTotal(MAX_TOTAL);
                config.setMaxIdle(MAX_IDLE);
                config.setMaxWaitMillis(MAX_WAIT_MILLIS);
                config.setTestOnBorrow(TEST_ON_BORROW);
                jedisPool = new JedisPool(config,ADDR,PORT,TIMEOUT,AUTH);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 获取Jedis实例
         * @return
         */
        public synchronized static Jedis getJedis(){
            try {
                if(jedisPool != null){
                    Jedis jedis = jedisPool.getResource();
                    return jedis;
                }else{
                    return null;
                }
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    
    
        /**
         * 是否存在key
         * @param key
         */
        public static boolean existKey(String key) {
            Jedis jedis = null;
            boolean isBroken = false;
            try {
                jedis = getJedis();
                jedis.select(0);
                return jedis.exists(key);
            } catch (Exception e) {
                isBroken = true;
            } finally {
                closeResource(jedis, isBroken);
            }
            return false;
        }
    
    
    
        /**
         * 释放jedis资源
         * @param jedis
         * @param isBroken
         */
        protected static void closeResource(Jedis jedis, boolean isBroken) {
            try {
               jedis.close();
            } catch (Exception e) {
    
            }
        }
    
    
        public static void returnResource(final Jedis jedis){
            //方法参数被声明为final,表示它是只读的。
            if(jedis!=null){
                jedisPool.returnResource(jedis);
                //jedis.close()取代jedisPool.returnResource(jedis)方法将3.0版本开始
                //jedis.close();
            }
        }
    }
    
    
    public static void main(String[] args) {
            RedisPool.getJedis().set("name","XXX");
            System.out.println(RedisPool.getJedis().get("name"));
        }
    

    相关文章

      网友评论

          本文标题:使用Redis存取数据

          本文链接:https://www.haomeiwen.com/subject/qhroaxtx.html