Подтвердить что ты не робот

Как работает Jedis Pool?

Я использую jedis pool для управления соединениями с сервером redis. Пример моего кода:

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;
    }

И код для извлечения пула jedis

 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;
      }

Проблема заключается в том, что после достижения количества ограниченных подключений веб-доступ больше не может быть доступен. Я что-то делаю неправильно?

4b9b3361

Ответ 1

Вы не настроили размер maxTotal пула, а значение по умолчанию - только 8. Вы можете изменить конструктор JedisFactory на:


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

Остерегайтесь также значения по умолчанию WhenExhaustedAction (WHEN_EXHAUSTED_BLOCK), поскольку это может быть не ваше желаемое поведение.

Jedis использует Apache Commons Pool, и вы можете прочитать здесь параметры: GenericObjectPool