2017-05-13 3 views
0

제 애플리케이션에서 Jedis 클라이언트를 사용하고 새로 작성했습니다. 나는 실을 몇 개 통과하고 결정적인 답을 찾지 못했습니다.get 및 set/flush 조작을위한 Jedis 풀 구성

나는 명확성이 필요한 두 가지 질문이 있습니다.

  1. 제 제작에는 jedis get 작업 및 설정 작업에 별도의 시간 초과를 설정하고 싶습니다. 모든 설정 작업에 대해 타임 아웃을 2000ms로 설정하고 100ms를 설정하려고합니다. 아래의 구성을 구현했습니다.

    JedisPoolConfig poolConfig = new JedisPoolConfig(); 
    poolConfig.setMaxIdle(30); 
    poolConfig.setMinIdle(10); 
    poolConfig.setMaxWaitMillis(2000); 
    jedisPool = new JedisPool(poolConfig, RedisDBUrl, port, 100); 
    

    위의 구성으로 작업 할 수 있는지 알려주세요. 나는 100ms의 읽기 타임 아웃과 2000ms의 maxwait을 설정하고있다.

  2. 제 이해가 정확한지 알고 싶습니다. 로 java.net.SocketTimeoutException : 읽기 또는 때때로 연결 시간 초과 시간 초과 시간에서

    나는 JedisConnectionException 얻을.

    내 응용 프로그램이 구성된 시간 동안 다시 연결할 수 없을 때 연결 시간이 초과됩니까?

    두 번째로, 응용 프로그램이 redis에 연결되었지만 작업 (가져 오기/설정)에 시간이 걸리거나 어떤 이유로 인해 읽기 시간 초과가 발생합니까?

    마지막으로 읽기 시간 초과 및 연결 시간 초과에 대한 시간 제한을 구성하려면 어떻게해야합니까?

답변

0

많은 히트 앤 트라이얼과 일부 테스트가 발견 된 후에 jedis get 및 set 조작에 대해 별도의 시간 초과를 설정할 수 없습니다. 일부 외부 라이브러리를 사용할 수 있습니다 (Google의 SimpleTimeLimiter처럼)

jedis가 redis 서버에 연결하려고하면 연결 시간 초과가 발생합니다. 내 시스템의 redis 서버 대기 시간이 ~ 120-125ms 그래서 jedis 생성자에서 timeout = 100ms를 설정하면 "연결 시간 초과"가 발생합니다.

redis 서버에 연결되어 있지만 redis 작업이 지정된 시간에 반환되지 않으면 "읽기 시간 초과"가 발생합니다. 이 시나리오를 테스트하기 위해 생성자에서 타임 아웃을 180ms로 설정하고 flushall 연산을 실행하려고 시도했습니다 (오랜 시간이 걸림). 여기에서 타임 아웃을 읽었습니다.

Sti poolConfig.setMaxWaitMillis()의 중요성은 무엇인지 모르겠다.