Jedis接続プールの基本使用

3528 ワード

Jedis直結
操作のたびにjedisオブジェクトが作成され、実行後に接続を閉じて解放されます.対応するのはTcp接続です.
Jedis接続プール
予めjedis接続オブジェクトのセットを接続プールに入れ、redisを操作する必要がある場合は接続プールからjedisオブジェクトを借り、操作が完了したら返却します.これによりjedisオブジェクトは繰り返し使用でき、socket接続の頻繁な作成を回避し、接続オーバーヘッドを節約できます.
シナリオの比較
接続プールの簡単な使用
public class Demo {
    
    public static void main(String[] args) {
        //       ,         
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        //   Jedis   ,    JedisPool    
        JedisPool jedisPool = new JedisPool(poolConfig, "119.23.226.29", 6379);
        Jedis jedis = null;
        try {
            //1.      jedis  
            jedis = jedisPool.getResource();
            //2.    
            jedis.set("hello", "jedis");
            System.out.println(jedis.get("hello"));
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            //    JedisPool,  close        ,       
            if(jedis != null){
                jedis.close();
            }
        }   
    }
}

接続プールパッケージの使用
public class RedisPool {
    //jedis   ,  static      tomcat        
    private static JedisPool pool;
    //          
    private static Integer maxTotal = Integer.parseInt(PropertiesUtil.getProperty("redis.max.total", "20"));
    //            
    private static Integer maxIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.max.idle", "20"));
    //            
    private static Integer minIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.min.idle", "0"));

    //           
    private static Boolean testOnBorrow = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.borrow", "true"));
    //           
    private static Boolean testOnReturn = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.return", "true"));

    private static String redisIp = PropertiesUtil.getProperty("redis.ip");
    private static Integer redisPort = Integer.parseInt(PropertiesUtil.getProperty("redis.port"));
    private static String password = PropertiesUtil.getProperty("redis.password");

    //      ,      
    private static void initPool() {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(maxTotal);
        config.setMaxIdle(maxIdle);
        config.setMinIdle(minIdle);
        config.setTestOnBorrow(testOnBorrow);
        config.setTestOnReturn(testOnReturn);
        //        ,    ,false     ,true           ,   true
        config.setBlockWhenExhausted(true);
        //    2s
        pool = new JedisPool(config, redisIp, redisPort, 1000*2, password);
    }

    static {
        initPool();
    }

    //           
    public static Jedis getJedis() {
        return pool.getResource();
    }
}
public class RedisPoolUtil {
    public static String set(String key, String value) {
        Jedis jedis = null;
        String result = null;
        try {
            jedis = RedisPool.getJedis();
            result = jedis.set(key, value);
        } catch (Exception e) {
            log.error("set key:{} value:{} error", key, value, e);
        } finally {
            shutdown(jedis);
        }
        return result;
    }
    
    public static void shutdown(Jedis jedis) {
        if (null != jedis) {
            // close                   
            jedis.close();
        }
    }
}