国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Jedis出現connection timeout問題解決方法(JedisPool連接池使用實例)

2019-11-26 15:29:40
字體:
來源:轉載
供稿:網友

今天發現Jedis 默認的連接方式 jedis=new Jedis(“localhost”,6379),老是發生connection timeout. 后來發現jedis類包還有一種可以設置最大連接時間的方法。

1->獲取Jedis實例需要從JedisPool中獲取;
2->用完Jedis實例需要還給JedisPool;
3->如果Jedis在使用過程中出錯,則也需要還給JedisPool;
代碼如下

復制代碼 代碼如下:

JedisPoolConfig config = new JedisPoolConfig();

  config.setMaxActive(100);

  config.setMaxIdle(20);

  config.setMaxWait(1000l);
  JedisPool pool;
  pool = new JedisPool(config, "2xx.xx.xx.14", 6379);

  boolean borrowOrOprSuccess = true;
  try {
   jedis = pool.getResource();
   // do redis opt by instance
  } catch (JedisConnectionException e) {
   borrowOrOprSuccess = false;
   if (jedis != null)
    pool.returnBrokenResource(jedis);

  } finally {
   if (borrowOrOprSuccess)
    pool.returnResource(jedis);
  }
  jedis = pool.getResource();

JedisPool依賴apache類包

commons-pool-1.5.6.jar

1->雖然拋出JedisConnectionException,但實際上有兩類錯誤,一類是pool.getReource(),得不到可用的jedis實例;另一類是jedis.set/get時出錯也會拋出這個Exception;為了實現區分,所以根據instance是否為null來實現,如果為空就證明instance根本就沒初始化,也就不用return給pool;如果instance不為null,則證明是需要返還給pool的;
2->在instance出錯時,也要調用returnBrokenResource返還給pool,否則下次通過getResource得到的instance的緩沖區可能還存在數據,出現問題!

JedisPool的配置參數很大程度上依賴于實際應用需求、軟硬件能力。以前沒用過commons-pool,所以這次花了一整間專門看這些參數的含義。。。JedisPool的配置參數大部分是由JedisPoolConfig的對應項來賦值的。

maxActive:控制一個pool可分配多少個jedis實例,通過pool.getResource()來獲取;如果賦值為-1,則表示不限制;如果pool已經分配了maxActive個jedis實例,則此時pool的狀態就成exhausted了,在JedisPoolConfig

maxIdle:控制一個pool最多有多少個狀態為idle的jedis實例;

whenExhaustedAction:表示當pool中的jedis實例都被allocated完時,pool要采取的操作;默認有三種WHEN_EXHAUSTED_FAIL(表示無jedis實例時,直接拋出

NoSuchElementException)、WHEN_EXHAUSTED_BLOCK(則表示阻塞住,或者達到maxWait時拋出JedisConnectionException)、WHEN_EXHAUSTED_GROW(則表示新建一個jedis實例,也就說設置的maxActive無用);

maxWait:表示當borrow一個jedis實例時,最大的等待時間,如果超過等待時間,則直接拋出JedisConnectionException;

testOnBorrow:在borrow一個jedis實例時,是否提前進行alidate操作;如果為true,則得到的jedis實例均是可用的;

testOnReturn:在return給pool時,是否提前進行validate操作;

testWhileIdle:如果為true,表示有一個idle object evitor線程對idle object進行掃描,如果validate失敗,此object會被從pool中drop掉;這一項只有在timeBetweenEvictionRunsMillis大于0時才有意義;

timeBetweenEvictionRunsMillis:表示idle object evitor兩次掃描之間要sleep的毫秒數;

numTestsPerEvictionRun:表示idle object evitor每次掃描的最多的對象數;

minEvictableIdleTimeMillis:表示一個對象至少停留在idle狀態的最短時間,然后才能被idle object evitor掃描并驅逐;這一項只有在timeBetweenEvictionRunsMillis大于0時才有意義;

softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基礎上,加入了至少minIdle個對象已經在pool里面了。如果為-1,evicted不會根據idle time驅逐任何對象。如果minEvictableIdleTimeMillis>0,則此項設置無意義,且只有在timeBetweenEvictionRunsMillis大于0時才有意義;

lifo:borrowObject返回對象時,是采用DEFAULT_LIFO(last in first out,即類似cache的最頻繁使用隊列),如果為False,則表示FIFO隊列;

其中JedisPoolConfig對一些參數的默認設置如下:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄梅县| 安福县| 安岳县| 南靖县| 舟曲县| 施甸县| 汪清县| 乡城县| 抚州市| 永定县| 乌苏市| 方山县| 灵璧县| 茶陵县| 眉山市| 巴青县| 福泉市| 吉首市| 井研县| 永宁县| 利川市| 锡林浩特市| 石门县| 太仓市| 革吉县| 镇平县| 林甸县| 大竹县| 虹口区| 炎陵县| 汕尾市| 万州区| 临泽县| 阿克陶县| 当涂县| 潜山县| 万盛区| 航空| 重庆市| 安岳县| 青州市|