zoukankan      html  css  js  c++  java
  • RedisUtil: Jedis连接自动释放

    package cloud.app.prod.home.utils;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    
    public class RedisUtil {
    
        // Redis服务器IP
        private static String ADDR = "127.0.0.1";
    
        // Redis的端口号
        private static int PORT = 6379;
    
        // 访问密码
        private static String AUTH = "scrm__12345";
    
        // 可用连接实例的最大数目,默认值为8;
        // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
    
        private static int MAX_ACTIVE = 1024;
    
        // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
        private static int MAX_IDLE = 200;
    
        // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
        private static int MAX_WAIT = 10000;
        private static int 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();
                config.setMaxActive(MAX_ACTIVE);
                config.setMaxIdle(MAX_IDLE);
                config.setMaxWait(MAX_WAIT);
                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 resource = jedisPool.getResource();
                    return resource;
                } else {
                    return null;
                }
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    
        /**
         * 释放jedis资源
         * 
         * @param jedis
         */
        public static void returnResource(final Jedis jedis) {
            if (jedis != null) {
                jedisPool.returnResource(jedis);
            }
        } 
      
        /** 
         * Jedis对象出异常的时候,回收Jedis对象资源 
         *  
         * @param jedis 
         */  
        public static void returnBrokenResource(final Jedis jedis) {  
            if (jedis != null) {  
                jedisPool.returnBrokenResource(jedis);  
            }  
      
        }  
        
        /**
         * 通过Redis的key获取值,并释放连接资源
         * @param key
         * @return 成功返回value,失败返回null
         */
        public static String get(String key) {
            Jedis jedis = null;
            String value = null;
    
            try {
                jedis = getJedis();
                if (null != jedis) {
                    value = jedis.get(key);
                }            
            } catch (Exception e) {
                returnBrokenResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);
            }
            return value; 
        }
        
        /**
         * 向redis存入key和value(如果key已经存在 则覆盖),并释放连接资源
         * @param key
         * @param value
         */
        public static void set(String key, String value) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (null != jedis) {
                    jedis.set(key, value);
                }            
            } catch (Exception e) {
                returnBrokenResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);        
            } 
        }
        
        /**
         * 向redis存入key和value(如果key已经存在 则覆盖),并且设置存活时间,及释放连接资源
         * @param key
         * @param value
         * @param seconds
         */
        public static void set(String key, String value, int seconds) {
            Jedis jedis = null;
            try {
                jedis = getJedis();
                if (null != jedis) {
                    jedis.set(key, value);
                    jedis.expire(key, seconds);
                }            
            } catch (Exception e) {
                returnBrokenResource(jedis);
                e.printStackTrace();
            } finally {
                returnResource(jedis);        
            } 
        }
    
        public static String byte2hex(byte[] buffer) {
            String h = "0x";
            for (byte aBuffer : buffer) {
                String temp = Integer.toHexString(aBuffer & 0xFF);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                h = h + " " + temp;
            }
            return h;
        }
    
    }
    View Code
  • 相关阅读:
    rabbitmq使用
    redis
    IO模型与IO复用介绍
    事件驱动与异步IO使用
    协程
    进程
    线程、锁
    paramiko模块与 StringIO模块
    socketserver 编程
    随记
  • 原文地址:https://www.cnblogs.com/BobXie85/p/8962219.html
Copyright © 2011-2022 走看看