jedis

 

jedis :數據庫

Jedis pool:app

 

jedis:tcp

        Jedis jedis2 = new Jedis(R_HOST, R_PORT + 1);
        jedis2.append("username", "zhangsan");

Jedis Pool:spa

JedisShardInfo jedis = new JedisShardInfo(R_HOST, R_PORT + 1, false);
        JedisShardInfo jedisSlave = new JedisShardInfo(R_HOST, R_PORT, false);
        List<JedisShardInfo> jedisList = new ArrayList<JedisShardInfo>();
        jedisList.add(jedisSlave);
        jedisList.add(jedis);
        
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        ShardedJedisPool pool = new ShardedJedisPool(poolConfig, jedisList,  Hashing.MURMUR_HASH, Sharded.DEFAULT_KEY_TAG_PATTERN);
        ShardedJedis sharedJedis = pool.getResource();

注意poolConfig中的內容:.net

     //   poolConfig.get("testOnBorrow")線程

  • TestOnBorrow=false時,因爲不檢測池裏鏈接的可用性,因而假如鏈接池中的鏈接被數據庫關閉了,應用經過鏈接池getConnection時,均可能獲取到這些不可用的鏈接,且這些鏈接若是不被其餘線程回收的話,它們不會被鏈接池被廢除,也不會從新被建立,佔用了鏈接池的名額。
  • ① 集羣某實例宕掉時,若是鏈接恰好不處於通訊階段,tcp鏈接正處於CLOSE_WAIT狀態或已關閉,當應用經過鏈接池getConnection時,在borrow時會檢測鏈接,因爲鏈接已關閉,因而報了以下報錯,並從新創建新鏈接,此時的新鏈接到集羣的其餘實例上了。後面能正常通訊。
  • ② 集羣某實例宕掉時,若是鏈接恰好處於通訊階段,因爲客戶端沒法當即感知服務端已斷鏈接,它可能會報以下錯誤,等待服務端的響應超時報錯。當應用經過鏈接池getConnection時,在borrow時會檢測鏈接,因爲鏈接已關閉,因而報了以下報錯,並從新創建新鏈接,此時的新鏈接到集羣的其餘實例上了。後面能正常通訊。

 

參考文章: https://blog.csdn.net/wangyangzhizhou/article/details/52209336code

相關文章
相關標籤/搜索