连接池如何使用 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)
时,您的应用程序将使用这些配置进行连接池。
希望对您有所帮助。
我有以下用于获取 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)
时,您的应用程序将使用这些配置进行连接池。
希望对您有所帮助。