java tomcat redis jedis amazon-elasticache

java - El número actual de conexiones sigue aumentando en mi nodo Elasticache Redis



tomcat jedis (3)

Puede verificar el tamaño de la agrupación usando JMX. Activar el hilo de desahucio inactivo es una buena idea. Puede hacerlo configurando el parámetro timeBetweenEvictionRunsMillis en JedisPoolConfig .

Si no usa transacciones ( EXEC ) u operaciones de bloqueo ( BLPOP , BRPOP ), puede mantener una conexión si el recuento de conexiones le preocupa. El cliente de lechuga es seguro para subprocesos con una conexión

Estoy usando Jedis en una aplicación web tomcat para conectarme a un nodo Elascticache Redis. La aplicación es utilizada por cientos de usuarios durante el día. No estoy seguro de si esto es normal o no, pero cada vez que compruebo que las conexiones actuales cuentan con las métricas del reloj en la nube, veo que las conexiones actuales aumentan sin que se caiga.

Esta es mi configuración de grupo de Jedis:

public static JedisPool getPool(){ if(pool == null){ JedisPoolConfig config = new JedisPoolConfig(); config.setMinIdle(5); config.setMaxIdle(35); config.setMaxTotal(1500); config.setMaxWaitMillis(3000); config.setTestOnBorrow(true); config.setTestWhileIdle(true); pool = new JedisPool(config, PropertiesManager.getInstance().getRedisServer()); } return pool; }

y así es como siempre uso las conexiones de grupo para ejecutar comandos de redis:

Jedis jedis = JedisUtil.getPool().getResource(); try{ //Redis commands } catch(JedisException e){ e.printStackTrace(); throw e; }finally{ if (jedis != null) JedisUtil.getPool().returnResource(jedis); }

Con esta configuración, el recuento es actualmente de más de 200. ¿Me estoy perdiendo algo que se supone que descarta o mata las conexiones no utilizadas? Establecí maxIdle en 35 y esperaba que el recuento caiga a 35 cuando el tráfico es muy bajo, pero esto nunca sucedió.


Tuvimos el mismo problema. Después de investigar un poco más, nos encontramos con esto (de la documentación oficial de redis - http://redis.io/topics/clients ):

Por defecto, las versiones recientes de Redis no cierran la conexión con el cliente si el cliente está inactivo durante muchos segundos: la conexión permanecerá abierta para siempre.

De forma predeterminada, aws proporciona un valor de tiempo de espera de 0. Por lo tanto, cualquier conexión que haya sido inicializada con su instancia de redis se mantendrá en redis incluso si la conexión inicializada por su cliente está inactiva.

Cree una nueva política de parámetros de caché en aws con un tiempo de espera diferente de 0 y luego debería ser bueno


En el grupo de parámetros de caché, puede editar el timeout . Por defecto está en 0, lo que deja la conexión inactiva en redis. Si lo configura en 100, eliminará las conexiones inactivas durante 100 segundos.