獲取連接池,通常連接池為單例,這里使用 雙端檢測機制保證只有一個實例
public class JedisPoolUtil { private static volatile JedisPool jedisPool = null; private JedisPoolUtil() { } public static JedisPool getJedisPoolInstance() { if (null == jedisPool) { synchronized (JedisPoolUtil.class) { //這里使用雙端檢測設計模式 if (null == jedisPool) { JedisPoolConfig poolConfig = new JedisPoolConfig(); //控制一個pool可分配多少個jedis實例,通過pool.getResource()來獲取;如果賦值為-1,則表示不限制, //如果pool已經分配了maxActive個jedis實例,則此時pool的狀態為exhausted poolConfig.setMaxActive(1000); poolConfig.setMaxIdle(32); //設置剩余連接各數,如果小於這個就會拋異常 //表示當borrow一個jedis實例時,最大的等待時間,如果超過等待時間,則直接拋JedisConnectionException poolConfig.setMaxWait(100*1000); //獲得一個jedis實例的時候是否檢查連接可用性(ping()),如果為true,則得到的jedis實例均是可用的 poolConfig.setTestOnBorrow(true); jedisPool = new JedisPool(poolConfig, "192.168.1.201", 6379); } } } return jedisPool; } /** * 釋放 * @param jedisPool 釋放哪個池中 * @param jedis 的哪個對象 */ public static void release(JedisPool jedisPool,Jedis jedis){ if(null != jedis){ jedisPool.returnResourceObject(jedis); } } }
測試代碼:
public class TestJedisPool { public static void main(String[] args) { JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance(); Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.set("aa", "bb"); } catch (Exception e) { e.printStackTrace(); } finally { JedisPoolUtil.release(jedisPool, jedis); } } }
127.0.0.1:6379> get aa
"bb"
127.0.0.1:6379>
JedisPoolCinfig