使用spring boot应用程序的RedisTemplate如何进行连接池化工作?

问题描述 投票:0回答:1

我有以下代码片段,用于获取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
java spring spring-boot spring-data-redis
1个回答
1
投票

当你创建 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), 你的应用程序将使用这些配置进行连接池。

我希望这能帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.