Redis JedisPool


獲取連接池,通常連接池為單例,這里使用 雙端檢測機制保證只有一個實例

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM