一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Jedis出現connection timeout問題解決方法(JedisPool連接池使用實例)

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

2019-11-23 17:04Java教程網 JAVA教程

這篇文章主要介紹了Jedis出現connection timeout問題解決方法,使用Jedis的JedisPool連接池解決了這個問題,需要的朋友可以參考下

今天發現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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: www.国产自拍 | 美女的隐私视频免费看软件 | 啊啊啊好大视频 | 美女视频一区二区三区在线 | 极品妖艳许清赵丽全文免费阅读 | 52av我爱avhaose01 51香蕉视频 | 亚洲国产一区 | 欧美在线视频一区二区 | 胸大的姑娘中文字幕视频 | 性做久久久久久久久老女人 | www.色.con| 亚洲福利视频在线观看 | 成人不卡在线 | 苍井空av | 国产精品夜夜爽张柏芝 | 精品无码国产AV一区二区三区 | 久久免费特黄毛片 | 亚洲国产精品成人综合久久久 | 日本一区二区视频在线 | 99re视频精品全部免费 | 亚洲欧美日韩中文高清一 | 韩国女主播一区二区视频 | 欧美综合另类 | 日本高清在线不卡 | 奇米影视4444 | 国产亚洲欧美日韩综合综合二区 | 四虎新网址 | 贰佰麻豆剧果冻传媒一二三区 | 果冻传媒在线视频观看免费 | 小货SAO边洗澡边CAO你动漫 | 欧美日韩免费一区二区在线观看 | 欧美亚洲桃花综合 | 国产精品亚洲专区在线播放 | 日本道色综合久久影院 | 爽新片xxxxxxx| 免费一级片在线 | 色欧美在线 | 久久久久九九 | 四虎成人免费视频 | 亚色九九九全国免费视频 | 人与动人物人a级特片 |