jedispool data cache java connection-pooling jedis

java - data - ¿Cómo funciona Jedis Pool?



redis spring boot (1)

Estoy usando el grupo de jedis para administrar las conexiones al servidor redis. Un código de ejemplo mío como sigue:

<!-- language: lang-java --> public Set<String> getTopArticleList(int start, int end) { Set<String> list = null; Jedis j = JedisFactory.getInstance().getJedisPool().getResource(); Pipeline pipe = j.pipelined(); try { // do stuff with redis pipe.sync(); } catch (JedisConnectionException jex) { JedisFactory.getInstance().getJedisPool().returnBrokenResource(j); } finally { JedisFactory.getInstance().getJedisPool().returnResource(j); } return list; }

Y código para recuperar la piscina de jedis.

<!-- language: lang-java --> class JedisFactory { private static JedisPool jedisPool; public JedisFactory() { JedisPoolConfig poolConfig = new JedisPoolConfig(); jedisPool = new JedisPool( poolConfig, RedisDBConfig.HOST, RedisDBConfig.PORT, RedisDBConfig.TIMEOUT, RedisDBConfig.PASSWORD ); } public JedisPool getJedisPool() { return jedisPool; } public static JedisFactory getInstance() { if (instance == null) { instance = new JedisFactory(); } return instance; } }

El problema es que después de alcanzar el número de conexiones limitadas, ya no se puede acceder a la web. ¿Estoy haciendo algo mal?


No ha configurado el tamaño máximo de la agrupación y el valor predeterminado es solo 8. Puede cambiar el constructor JedisFactory a:

public JedisFactory() { JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(128); jedisPool = new JedisPool(poolConfig, RedisDBConfig.HOST, RedisDBConfig.PORT, RedisDBConfig.TIMEOUT, RedisDBConfig.PASSWORD); }

Tenga cuidado también con el valor predeterminado de WhenExhaustedAction (WHEN_EXHAUSTED_BLOCK), ya que puede que no sea su comportamiento deseado.

Jedis usa Apache Commons Pool, y puedes leer sobre sus parámetros aquí: GenericObjectPool