오늘 나는 Jedis의 기본 연결 방법이 jedis=new Jedis("localhost",6379)이고 연결 시간 초과가 항상 발생한다는 것을 발견했습니다. 나중에 jedis 클래스 패키지에도 최대 연결 시간을 설정하는 방법이 있다는 것을 발견했습니다.
1->Jedis 인스턴스를 얻으려면 JedisPool에서 얻어야 합니다.
2->Jedis 인스턴스를 모두 사용한 후에는 JedisPool에 반환해야 합니다.
3->Jedis가 사용 중에 오류를 범하면 JedisPool에도 반환해야 합니다.
코드는 다음과 같습니다
다음과 같이 코드 코드를 복사합니다.
JedisPoolConfig config = 새로운 JedisPoolConfig();
config.setMaxActive(100);
config.setMaxIdle(20);
config.setMaxWait(1000l);
JedisPool 풀;
pool = new JedisPool(config, "2xx.xx.xx.14", 6379);
부울 BorrowOrOprSuccess = true;
노력하다 {
제디스 = pool.getResource();
// 인스턴스별로 redis 선택을 수행합니다.
} 잡기(JedisConnectionException e) {
BorrowOrOprSuccess = 거짓;
if (제디스 != null)
pool.returnBrokenResource(jedis);
} 마지막으로 {
if(빌려오거나Opr성공)
pool.returnResource(jedis);
}
제디스 = pool.getResource();
JedisPool은 Apache 클래스 패키지에 따라 다릅니다.
커먼즈-풀-1.5.6.jar
1->JedisConnectionException이 발생하더라도 실제로는 두 가지 유형의 오류가 있습니다. 하나는 사용 가능한 jedis 인스턴스를 가져올 수 없는 pool.getResource()이고, 다른 하나는 jedis.set/get 중 오류가 발생한다는 것입니다. 구별을 실현하기 위해 인스턴스가 null인지 여부에 따라 구현됩니다. null이면 인스턴스가 전혀 초기화되지 않았음을 증명하므로 인스턴스가 있으면 풀에 반환할 필요가 없습니다. null이 아닌 경우 풀로 반환되어야 함을 증명합니다.
2->인스턴스 오류가 발생하면 returnBrokenResource도 호출하여 풀로 반환해야 합니다. 그렇지 않으면 다음번에 getResource를 통해 얻은 인스턴스의 버퍼에 데이터가 남아 있어 문제가 발생할 수 있습니다!
JedisPool의 구성 매개변수는 실제 애플리케이션 요구 사항과 소프트웨어 및 하드웨어 기능에 따라 크게 달라집니다. 나는 이전에 commons-pool을 사용한 적이 없었기 때문에 이번에는 이 매개변수의 의미를 살펴보는데 온 방을 소비했습니다. . . JedisPool의 구성 매개변수 대부분은 JedisPoolConfig의 해당 항목에 의해 할당됩니다.
maxActive: pool.getResource()를 통해 얻은 풀에 할당할 수 있는 jedis 인스턴스 수를 제어합니다. 값이 -1이면 제한이 없음을 의미합니다. 풀이 maxActive jedis 인스턴스를 할당했다면 풀 상태는 다음과 같습니다. 이번에는 JedisPoolConfig에서 소진됩니다.
maxIdle: 풀이 가질 수 있는 유휴 상태의 jedis 인스턴스의 최대 수를 제어합니다.
whenExhaustedAction: 풀의 모든 jedis 인스턴스가 할당되었을 때 풀에서 수행할 작업을 나타냅니다. 기본적으로 세 가지 유형의 WHEN_EXHAUSTED_FAIL이 있습니다(즉, jedis 인스턴스가 없으면 직접 발생합니다).
NoSuchElementException), WHEN_EXHAUSTED_BLOCK(차단되었거나 maxWait에 도달하면 JedisConnectionException이 발생함을 의미함), WHEN_EXHAUSTED_GROW(새로운 jedis 인스턴스가 생성됨을 의미하며 이는 maxActive 세트가 쓸모 없음을 의미함);
maxWait: Jedis 인스턴스를 빌릴 때 최대 대기 시간을 나타냅니다. 대기 시간이 초과되면 JedisConnectionException이 직접 발생합니다.
testOnBorrow: jedis 인스턴스를 빌릴 때 Alidate 작업을 미리 수행할지 여부, true인 경우 획득한 jedis 인스턴스를 사용할 수 있습니다.
testOnReturn: 풀로 복귀할 때 유효성 검사 작업을 미리 수행할지 여부;
testWhileIdle: true인 경우 유휴 개체를 검색하는 유휴 개체 제거 스레드가 있음을 의미합니다. 유효성 검사에 실패하면 이 항목은 timeBetweenEvictionRunsMillis가 0보다 큰 경우에만 의미가 있습니다.
timeBetweenEvictionRunsMillis: 유휴 객체 제거기가 두 스캔 사이에 대기해야 하는 시간(밀리초)을 나타냅니다.
numTestsPerEvictionRun: 유휴 개체 제거기가 매번 검색하는 최대 개체 수를 나타냅니다.
minEvictableIdleTimeMillis: 유휴 개체 제거기가 개체를 검색하고 제거하기 전에 개체가 유휴 상태로 유지되는 최소 시간을 나타냅니다. 이 항목은 timeBetweenEvictionRunsMillis가 0보다 큰 경우에만 의미가 있습니다.
SoftMinEvictableIdleTimeMillis: minEvictableIdleTimeMillis를 기반으로 최소한 minIdle 개체가 풀에 추가됩니다. -1이면 제거됨은 유휴 시간을 기준으로 어떤 객체도 제거하지 않습니다. minEvictableIdleTimeMillis>0인 경우 이 설정은 의미가 없으며 timeBetweenEvictionRunsMillis가 0보다 큰 경우에만 의미가 있습니다.
lifo: BorrowObject가 객체를 반환할 때 DEFAULT_LIFO(후입선출, 캐시와 유사하게 가장 자주 사용되는 대기열)가 사용됩니다. False이면 FIFO 대기열을 의미합니다.
일부 매개변수에 대한 JedisPoolConfig의 기본 설정은 다음과 같습니다:
testWhileIdle=true
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1