通過JedisPool資源池管理jedis連線
阿新 • • 發佈:2019-01-26
要應用JedisPool資源池管理jedis,需要引入兩個包,(1)jedis jar包或redis jar包 (2)阿帕奇下的commons-pool jar包,好像用到資源池的都需要這個
下面是一點點小程式碼。需要說明的是,釋放jedis資源的方法已經deprecated了,不知道是不是這個原因,導致釋放的jedis資源能繼續使用。具體原因等確定後再更新。
package jedis.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class UseJedisPool {
private static JedisPool jedisPool = null;
//初始化redis連線池
static{
JedisPoolConfig config = new JedisPoolConfig();
//配置最大jedis例項數
config.setMaxTotal(1000);
//配置資源池最大閒置數
config.setMaxIdle(200);
//等待可用連線的最大時間
config.setMaxWaitMillis(10000 );
//在borrow一個jedis例項時,是否提前進行validate操作;如果為true,則得到的jedis例項均是可用的
config.setTestOnBorrow(true);
jedisPool = new JedisPool("10.133.17.79",6379);
}
//獲取Jedis例項
public synchronized static Jedis getJedis(){
if(jedisPool != null){
Jedis resource = jedisPool.getResource();
return resource;
}else{
return null;
}
}
//釋放Jedis資源
public static void returnResource(final Jedis jedis){
if(jedis != null){
jedisPool.returnResource(jedis);
}
}
public static void main(String[] args){
Jedis jedis = UseJedisPool.getJedis();
jedis.set("test", "hello JedisPool.");
jedis.set("hello", "JedisPool.");
System.out.println(jedis.get("test"));
UseJedisPool.returnResource(jedis);
//測試發現釋放Jedis資源後,下面的這個還能返回JedisPool ????
System.out.println(jedis.get("hello"));
}
}
自Jedis3.0版本後jedisPool.returnResource()遭棄用,官方重寫了Jedis的close方法用以代替;官方建議應用redis.clients.jedis#Jedis的close方法進行資源回收,官方程式碼如下:
@Override
public void close() {
if (dataSource != null) {
if (client.isBroken()) {
this.dataSource.returnBrokenResource(this);
} else {
this.dataSource.returnResource(this);
}
} else {
client.close();
}
}
也就是說在使用完jedis的時候,我們需要手動去關閉。