2017-09-04 8 views
1

Jedis 연결 풀에서 Redis를 사용하는 데 문제가 있습니다.Jedis 연결이 해제되지 않습니다.

내가보고있는 동작은 연결이 설정된 후 다시 연결 풀로 해제되지 않는다는 것입니다.

redis-cli client list 명령을 사용하면 계속해서 연결이 표시 될 수 있으므로이 사실을 알고 있습니다.

누군가 내 jedis 연결 풀을 검토하여 문제의 원인인지 알 수 있습니까? 다음과 같은 속성이 설정되어

 <spring:bean id="ElasticachePoolConfig" name="ElasticachePoolConfig" class="redis.clients.jedis.JedisPoolConfig" > 

     <!-- Minimum number of idle connections to Redis - these can be seen as always open and ready to serve --> 
     <spring:property name="minIdle" value="${redis.minIdle}" /> 

     <!-- Number of connections to Redis that just sit there and do nothing --> 
     <spring:property name="maxIdle" value="${redis.maxIdle}" /> 

     <!-- Maximum number of active connections that can be allocated from this pool at the same time --> 
     <spring:property name="maxTotal" value="${redis.maxTotal}" /> 

     <!-- The minimum amount of time an object may sit idle in the pool before it is eligable for eviction by the idle object evictor.--> 
     <spring:property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}" /> 

     <!-- The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor --> 
     <spring:property name="softMinEvictableIdleTimeMillis" value="${redis.softMinEvictableIdleTimeMillis}" /> 

     <!-- The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception --> 
     <spring:property name="maxWaitMillis" value="${redis.maxWaitMillis}" /> 

     <!-- Maximum number of connections to test in each idle check --> 
     <spring:property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}" /> 

     <!-- Tests whether connection is dead when connection retrieval method is called --> 
     <spring:property name="testOnBorrow" value="${redis.testOnBorrow}" /> 

     <!-- Tests whether connection is dead when returning a connection to the pool --> 
     <spring:property name="testOnReturn" value="${redis.testOnReturn}" /> 

     <!-- Tests whether connections are dead during idle periods --> 
     <spring:property name="testWhileIdle" value="${redis.testWhileIdle}" /> 

     <!-- Idle connection checking period --> 
     <spring:property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}" /> 

     <spring:property name="blockWhenExhausted" value="${redis.blockWhenExhausted}" /> 

    </spring:bean> 

은 ...

redis.port=6379 
redis.timeout=2000 
redis.ttl=600 
redis.host=localhost 
redis.repeater.maxRetries=3 
redis.repeater.millisBetweenRetries=2000 
redis.minIdle=5 
redis.maxIdle=10 
redis.maxTotal=8 
redis.minEvictableIdleTimeMillis=30000 
redis.softMinEvictableIdleTimeMillis=-1 
redis.maxWaitMillis=5000 
redis.numTestsPerEvictionRun=10 
redis.testOnBorrow=true 
redis.testOnReturn=true 
redis.testWhileIdle=false 
redis.timeBetweenEvictionRunsMillis=50000 
redis.blockWhenExhausted=true 
+0

"연결이 설정되면 연결 풀에 다시 릴리스되지 않습니다.이 문제는 redis-cli 클라이언트 목록 명령을 사용하여 여전히 연결이 끊어지지 않고 있기 때문에 알 수 있습니다." 잘못된 결론. 연결은 주변에 머물러 있어야합니다. * open * 연결을 연결 풀로 다시 연결합니다. 닫지 않은 연결은 아닙니다. – hobbs

+0

안녕하세요. @hobbs가 응답 해 주셔서 감사합니다. 네가 옳아. 하지만 퇴거가 끝나면 연결이 내 유휴 연결로 다시 떨어지지 않아야합니까? – Richie

+0

'maxIdle'이하로 떨어집니다. – hobbs

답변

0

귀하의 maxIdle 설정은 maxTotal 설정보다 더 큰, 그래서 효과적으로에는 연결이 대기에 방출되지 않습니다. 풀은 maxIdle 개의 연결을 유지합니다.

JedisPool은 Apache Commons Pooling을 내부적으로 사용합니다. maxIdlemaxTotal의 차이점은 this answer을 참조하십시오.