欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2014年05月29日 08:59:36   作者:  
這篇文章主要介紹了Jedis出現(xiàn)connection timeout問題解決方法,使用Jedis的JedisPool連接池解決了這個(gè)問題,需要的朋友可以參考下

今天發(fā)現(xiàn)Jedis 默認(rèn)的連接方式 jedis=new Jedis(“l(fā)ocalhost”,6379),老是發(fā)生connection timeout. 后來發(fā)現(xiàn)jedis類包還有一種可以設(shè)置最大連接時(shí)間的方法。

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

復(fù)制代碼 代碼如下:

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,但實(shí)際上有兩類錯(cuò)誤,一類是pool.getReource(),得不到可用的jedis實(shí)例;另一類是jedis.set/get時(shí)出錯(cuò)也會(huì)拋出這個(gè)Exception;為了實(shí)現(xiàn)區(qū)分,所以根據(jù)instance是否為null來實(shí)現(xiàn),如果為空就證明instance根本就沒初始化,也就不用return給pool;如果instance不為null,則證明是需要返還給pool的;
2->在instance出錯(cuò)時(shí),也要調(diào)用returnBrokenResource返還給pool,否則下次通過getResource得到的instance的緩沖區(qū)可能還存在數(shù)據(jù),出現(xiàn)問題!

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

maxActive:控制一個(gè)pool可分配多少個(gè)jedis實(shí)例,通過pool.getResource()來獲?。蝗绻x值為-1,則表示不限制;如果pool已經(jīng)分配了maxActive個(gè)jedis實(shí)例,則此時(shí)pool的狀態(tài)就成exhausted了,在JedisPoolConfig

maxIdle:控制一個(gè)pool最多有多少個(gè)狀態(tài)為idle的jedis實(shí)例;

whenExhaustedAction:表示當(dāng)pool中的jedis實(shí)例都被allocated完時(shí),pool要采取的操作;默認(rèn)有三種WHEN_EXHAUSTED_FAIL(表示無jedis實(shí)例時(shí),直接拋出

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

maxWait:表示當(dāng)borrow一個(gè)jedis實(shí)例時(shí),最大的等待時(shí)間,如果超過等待時(shí)間,則直接拋出JedisConnectionException;

testOnBorrow:在borrow一個(gè)jedis實(shí)例時(shí),是否提前進(jìn)行alidate操作;如果為true,則得到的jedis實(shí)例均是可用的;

testOnReturn:在return給pool時(shí),是否提前進(jìn)行validate操作;

testWhileIdle:如果為true,表示有一個(gè)idle object evitor線程對(duì)idle object進(jìn)行掃描,如果validate失敗,此object會(huì)被從pool中drop掉;這一項(xiàng)只有在timeBetweenEvictionRunsMillis大于0時(shí)才有意義;

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

numTestsPerEvictionRun:表示idle object evitor每次掃描的最多的對(duì)象數(shù);

minEvictableIdleTimeMillis:表示一個(gè)對(duì)象至少停留在idle狀態(tài)的最短時(shí)間,然后才能被idle object evitor掃描并驅(qū)逐;這一項(xiàng)只有在timeBetweenEvictionRunsMillis大于0時(shí)才有意義;

softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基礎(chǔ)上,加入了至少minIdle個(gè)對(duì)象已經(jīng)在pool里面了。如果為-1,evicted不會(huì)根據(jù)idle time驅(qū)逐任何對(duì)象。如果minEvictableIdleTimeMillis>0,則此項(xiàng)設(shè)置無意義,且只有在timeBetweenEvictionRunsMillis大于0時(shí)才有意義;

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

其中JedisPoolConfig對(duì)一些參數(shù)的默認(rèn)設(shè)置如下:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1

相關(guān)文章

  • Hibernate單表操作實(shí)例解析

    Hibernate單表操作實(shí)例解析

    這篇文章主要介紹了Hibernate單表操作實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java利用異常中斷當(dāng)前任務(wù)的技巧分享

    Java利用異常中斷當(dāng)前任務(wù)的技巧分享

    在日常開發(fā)中,我們經(jīng)常遇到調(diào)用別人的代碼來完成某個(gè)任務(wù),但是當(dāng)代碼比較耗時(shí)的時(shí)候,沒法從外部終止該任務(wù),所以本文為大家介紹了如何利用異常中斷當(dāng)前任務(wù),需要的可以參考下
    2023-08-08
  • Java RMI機(jī)制講解

    Java RMI機(jī)制講解

    這篇文章主要介紹了Java RMI機(jī)制講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • SpringBoot的10個(gè)參數(shù)驗(yàn)證技巧分享

    SpringBoot的10個(gè)參數(shù)驗(yàn)證技巧分享

    參數(shù)驗(yàn)證很重要,是平時(shí)開發(fā)環(huán)節(jié)中不可少的一部分,但是我想很多后端同事會(huì)偷懶,干脆不錯(cuò),這樣很可能給系統(tǒng)的穩(wěn)定性和安全性帶來嚴(yán)重的危害,那么在Spring Boot應(yīng)用中如何做好參數(shù)校驗(yàn)工作呢,本文提供了10個(gè)小技巧,需要的朋友可以參考下
    2023-09-09
  • springboot項(xiàng)目集成swagger-bootstrap-ui全過程

    springboot項(xiàng)目集成swagger-bootstrap-ui全過程

    這篇文章主要介紹了springboot項(xiàng)目集成swagger-bootstrap-ui全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 詳解Java 序列化與反序列化(Serialization)

    詳解Java 序列化與反序列化(Serialization)

    這篇文章主要介紹了Java 序列化與反序列化(Serialization),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí) 吧
    2019-03-03
  • java實(shí)現(xiàn)MapReduce對(duì)文件進(jìn)行切分的示例代碼

    java實(shí)現(xiàn)MapReduce對(duì)文件進(jìn)行切分的示例代碼

    本文主要介紹了java實(shí)現(xiàn)MapReduce對(duì)文件進(jìn)行切分的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • java swagger ui 添加header請(qǐng)求頭參數(shù)的方法

    java swagger ui 添加header請(qǐng)求頭參數(shù)的方法

    今天小編就為大家分享一篇java swagger ui 添加header請(qǐng)求頭參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 詳解Spring Cloud Consul 實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn)

    詳解Spring Cloud Consul 實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn)

    這篇文章主要介紹了Spring Cloud Consul 實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java guava monitor監(jiān)視器線程的使用詳解

    Java guava monitor監(jiān)視器線程的使用詳解

    工作中的場(chǎng)景中是否存在類似這樣的場(chǎng)景,需要提交的線程在某個(gè)觸發(fā)條件下執(zhí)行。本文主要就是使用guava中的monitor來優(yōu)雅的實(shí)現(xiàn)帶監(jiān)視器的線程
    2021-11-11

最新評(píng)論