Как пул соединений работает с RedisTemplate с использованием приложения Spring Boot - PullRequest
0 голосов
/ 09 мая 2020

У меня есть следующий фрагмент кода, который используется для получения RedisTemplate.

@Bean
public JedisConnectionFactory getJedisConnectionFactory() {
    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
    redisStandaloneConfiguration.setHostName(host);
    if (!StringUtils.isEmpty(password)) {
        redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
    }
    redisStandaloneConfiguration.setPort(port);
    return new JedisConnectionFactory(redisStandaloneConfiguration, getJedisClientConfiguration());
}

@Bean
public RedisTemplate redisTemplate() {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    redisTemplate.setConnectionFactory(getJedisConnectionFactory());
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    return redisTemplate;

}

Мой вопрос, как sprint-boot будет понимать объединение соединений, потому что я не предоставил никакой информации в моя фабрика о пуле подключений. Файл свойств моего приложения имеет следующие свойства.

redis.host=<redis-host>
redis.port=<port>
redis.password=<password>
redi.jedis.pool.max.total=16
redi.jedis.pool.max.idle=8
redi.jedis.pool.min.idle=4

1 Ответ

1 голос
/ 09 мая 2020

Когда вы создаете JedisClientConfiguration с помощью построителя

JedisClientConfigurationBuilder builder = JedisClientConfiguration .builder()

, это вызывает внутренний конструктор по умолчанию для JedisClientConfiguration, который выглядит примерно так.

private DefaultJedisClientConfigurationBuilder() {
  this.poolConfig = new JedisPoolConfig();
  // other configs
}

JedisPoolConfig далее расширяет GenericObjectPoolConfig, который имеет значения по умолчанию, как показано ниже. (которые будут значениями по умолчанию, если не будут переопределены вручную)

maxTotal = 8;
maxIdle = 8;
minIdle = 0;

В вашем случае, поскольку вы переопределили конфигурацию с помощью GenericObjectPoolConfig, он будет выбирать значения оттуда.

GenericObjectPoolConfig.setMaxTotal(maxConnection); 
GenericObjectPoolConfig.setMaxIdle(maxConnectionIdle); 
GenericObjectPoolConfig.setMinIdle(minConnectionIdle);

Поскольку вы указываете usePooling() и poolConfig(genericObjectPoolConfig), ваше приложение будет использовать эту конфигурацию для пула соединений.

Надеюсь, это поможет.

...