Jedis接続プールの基本使用
3528 ワード
Jedis直結
操作のたびにjedisオブジェクトが作成され、実行後に接続を閉じて解放されます.対応するのはTcp接続です.
Jedis接続プール
予めjedis接続オブジェクトのセットを接続プールに入れ、redisを操作する必要がある場合は接続プールからjedisオブジェクトを借り、操作が完了したら返却します.これによりjedisオブジェクトは繰り返し使用でき、socket接続の頻繁な作成を回避し、接続オーバーヘッドを節約できます.
シナリオの比較
接続プールの簡単な使用
接続プールパッケージの使用
操作のたびに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();
}
}
}