繁体   English   中英

连接池如何使用 spring 引导应用程序与 RedisTemplate 一起工作

[英]How connection pooling works with RedisTemplate using spring boot application

我有以下用于获取 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

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

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM