在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实例创建独立的RedisConnectionFactoryRedisTemplate

@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;

注意事项

  1. 连接池优化
    需为每个实例单独配置连接池参数(如最大连接数、超时时间),避免资源竞争。例如在配置文件中添加max-activemax-idle等参数。

  2. 主从与集群区分
    若两个Redis实例为集群模式,需使用RedisClusterConfiguration替代RedisStandaloneConfiguration

  3. 序列化兼容性
    建议统一使用Jackson2JsonRedisSerializerStringRedisSerializer,避免不同模板序列化方式不一致导致数据读取失败。

  4. 动态切换
    若需运行时动态切换数据源,可通过RedisTemplate.setConnectionFactory()方法实现,但需注意线程安全问题

posted @ 2025-05-22 10:40  子墨老师  阅读(199)  评论(0)    收藏  举报