在springboot项目中是否可以使用两个不同地址的redis
在Spring Boot项目中可以通过多数据源配置的方式使用两个不同地址的Redis实例。以下是具体实现方案
1.依赖配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2.配置文件设置
在application.yml中分别定义两个Redis实例的配置项
spring:
redis:
redis1:
host: 192.168.1.100
port: 6379
password: pass1
database: 0
redis2:
host: 192.168.1.101
port: 6380
password: pass2
database: 1
3.配置类创建
为每个Redis实例创建独立的RedisConnectionFactory和RedisTemplate
@Configuration
public class RedisConfig {
// Redis实例1配置
@Bean(name = "redis1ConnectionFactory")
public RedisConnectionFactory redis1ConnectionFactory(
@Value("${spring.redis.redis1.host}") String host,
@Value("${spring.redis.redis1.port}") int port) {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port);
config.setPassword(RedisPassword.of("pass1"));
return new JedisConnectionFactory(config);
}
@Bean(name = "redis1Template")
public RedisTemplate<String, Object> redis1Template(
@Qualifier("redis1ConnectionFactory") RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
return template;
}
// 重复上述步骤配置Redis实例2
}
4.使用不同Redis示例
在业务代码中通过@Qualifier注入对应的模板:
@Autowired
@Qualifier("redis1Template")
private RedisTemplate<String, Object> redis1Template;
@Autowired
@Qualifier("redis2Template")
private RedisTemplate<String, Object> redis2Template;
注意事项
-
连接池优化
需为每个实例单独配置连接池参数(如最大连接数、超时时间),避免资源竞争。例如在配置文件中添加max-active、max-idle等参数。 -
主从与集群区分
若两个Redis实例为集群模式,需使用RedisClusterConfiguration替代RedisStandaloneConfiguration。 -
序列化兼容性
建议统一使用Jackson2JsonRedisSerializer或StringRedisSerializer,避免不同模板序列化方式不一致导致数据读取失败。 -
动态切换
若需运行时动态切换数据源,可通过RedisTemplate.setConnectionFactory()方法实现,但需注意线程安全问题

浙公网安备 33010602011771号