【问题标题】:How connection pooling works with RedisTemplate using spring boot application连接池如何使用 Spring Boot 应用程序与 RedisTemplate 一起工作
【发布时间】:2020-05-09 17:35:30
【问题描述】:

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

【问题讨论】:

  • 您能否也分享一下这个getJedisClientConfiguration() 的详细信息。
  • @Bean public JedisClientConfiguration getJedisClientConfiguration() { JedisClientConfiguration.JedisClientConfigurationBuilder builder = (JedisClientConfiguration.JedisClientConfigurationBuilder) JedisClientConfiguration .builder(); GenericObjectPoolConfig GenericObjectPoolConfig = new GenericObjectPoolConfig(); GenericObjectPoolConfig.setMaxTotal(maxConnection); GenericObjectPoolConfig.setMaxIdle(maxConnectionIdle); GenericObjectPoolConfig.setMinIdle(minConnectionIdle); return builder.usePooling().poolConfig(GenericObjectPoolConfig).build(); }
  • 如果没有指定池化值,默认设置什么值?

标签: java spring spring-boot spring-data-redis


【解决方案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) 时,您的应用将使用这些配置进行连接池。

我希望这会有所帮助。

【讨论】:

猜你喜欢
  • 2017-06-22
  • 2019-12-25
  • 2020-11-29
  • 1970-01-01
  • 2016-11-17
  • 2022-11-11
  • 2019-12-14
  • 2018-09-24
  • 2016-07-07
相关资源
最近更新 更多