1. 程式人生 > >通過JedisPool資源池管理jedis連線

通過JedisPool資源池管理jedis連線

要應用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的時候,我們需要手動去關閉。