在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.100port: 6379password: pass1database: 0redis2:host: 192.168.1.101port: 6380password: pass2database: 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()
方法实现,但需注意线程安全问题