Java 连接池如何使用spring引导应用程序与RedisTemplate一起工作
我有以下代码片段,用于获取RedisTemplateJava 连接池如何使用spring引导应用程序与RedisTemplate一起工作,java,spring,spring-boot,spring-data-redis,Java,Spring,Spring Boot,Spring Data Redis,我有以下代码片段,用于获取RedisTemplate @Bean public JedisConnectionFactory getJedisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName(host); i
@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;
@Bean
public-JedisConnectionFactory getJedisConnectionFactory(){
RedisStandaloneConfiguration RedisStandaloneConfiguration=新的RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(主机);
如果(!StringUtils.isEmpty(密码)){
redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
}
重新标准配置。设置端口(端口);
返回新的JedisConnectionFactory(重新标准配置,getJedisClientConfiguration());
}
@豆子
公共RedisTemplate RedisTemplate(){
RedisTemplate RedisTemplate=新RedisTemplate();
redisTemplate.setConnectionFactory(getJedisConnectionFactory());
setKeySerializer(新的StringRedisSerializer());
返回模板;
}
我的问题是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
redis.host=
redis.port=
redis.password=
redi.绝地武士池最大总数=16
redi.jedis.pool.max.idle=8
redi.jedis.pool.min.idle=4
使用生成器创建绝地客户端配置时
JedisClientConfigurationBuilder builder = JedisClientConfiguration .builder()
这将在内部调用JedisClientConfiguration
上的默认构造函数,如下所示
private DefaultJedisClientConfigurationBuilder() {
this.poolConfig = new JedisPoolConfig();
// other configs
}
config
进一步扩展了具有如下默认值的GenericObjectPoolConfig
。(如果不手动覆盖,则为默认值)
在您的情况下,由于您已使用GenericObjectPoolConfig
覆盖了config,因此它将从中拾取值
GenericObjectPoolConfig.setMaxTotal(maxConnection);
GenericObjectPoolConfig.setMaxIdle(maxConnectionIdle);
GenericObjectPoolConfig.setMinIdle(minConnectionIdle);
当您指定usePooling()
和poolConfig(genericObjectPoolConfig)
时,您的应用程序将使用这些配置进行连接池
我希望这能有所帮助。您能分享此getJedisClientConfiguration()
的详细信息吗。@Bean公共JedisClientConfiguration getJedisClientConfiguration(){JedisClientConfiguration.JedisClientConfiguration builder=(JedisClientConfiguration.JedisClientConfiguration builder)JedisClientConfiguration.builder();GenericObjectPoolConfig GenericObjectPoolConfig=new GenericObjectPoolConfig();GenericObjectPoolConfig.setMaxTotal(maxConnection);GenericObjectPoolConfig.setMaxIdle(maxConnectionIdle);GenericObjectPoolConfig.setMinIdle(minConnectionIdle);返回builder.usePooling().poolConfig(GenericObjectPoolConfig).build();}如果没有指定池值,那么设置的默认值是什么?感谢您的详细解释。你能给我指一些文件吗?在那里我可以完整地阅读它,并且更好地理解它future@Parveen你可以在这里查阅官方文件。此外,您还可以浏览源代码。你也可以通过绝地武士
GenericObjectPoolConfig.setMaxTotal(maxConnection);
GenericObjectPoolConfig.setMaxIdle(maxConnectionIdle);
GenericObjectPoolConfig.setMinIdle(minConnectionIdle);