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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久香蕉国产免费天天 | 国产综合网站 | 男女被爆动漫羞羞动漫 | 国产精品视频自拍 | 果冻传媒新在线观看免费 | 成人夜视频寂寞在线观看 | 国产精品视频免费一区二区三区 | 王淑兰李思雨李铁柱乡村小说免费 | 精品国产视频 | 亚洲成人黄色 | 国自产拍在线天天更新91 | 精品国产在天天线在线麻豆 | 日本 片 成人 在线 日b视频免费 | 无套啪啪 | 91男人 | 婚前试爱免费观看 | 国产成人精品一区二区不卡 | 日韩人成| 办公室里被迫高h | 无码人妻99久久密AV | 色综合中文字幕天天在线 | 免费片在线观看 | a级影视 | 免费看男人使劲躁女人小说 | 国产精品视频久 | 欧美精品综合一区二区三区 | 男人操美女逼视频 | 国产永久一区二区三区 | igao网果冻传媒 | 性妲己 | 按摩师他揉我奶好爽捏我奶 | 欧美国产日本精品一区二区三区 | 日韩aaa| 国产成人精品曰本亚洲77美色 | 九九在线免费视频 | 国产精品一区二区不卡的视频 | 国产大片51精品免费观看 | 亚洲视频在线观看免费视频 | 国产精品亚洲精品青青青 | 久久影院中文字幕 | 我和子伦系列小说 |