Spring Boot支持多Redis數據源

項目需要把自建redis遷移到雲服務,因爲無法做到業務無感遷移,所以業務遷移時,部分數據需要雙讀,因此需要支持多Redis數據源

支持多Redis數據源

  • 配置信息application.yml
spring:
  redis:
    host: localhost
    port: 6379

  second-redis:
    host: localhost
    port: 16379
  • 配置主數據源
@Primary
@Bean
public LettuceConnectionFactory primaryLettuceConnectionFactory(@Value("${spring.redis.host}") String host,
                                                                @Value("${spring.redis.port}") int port,
                                                                @Value("${spring.redis.password:}") String password) {
    RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port);
    if (StringUtils.hasLength(password)) {
        config.setPassword(password);
    }

    return new LettuceConnectionFactory(config);
}

@Bean
public StringRedisTemplate stringRedisTemplate(LettuceConnectionFactory primaryLettuceConnectionFactory) {
    return new StringRedisTemplate(primaryLettuceConnectionFactory);
}
  • 配置備數據源
@Bean
public StringRedisTemplate secondStringRedisTemplate(@Qualifier("secondLettuceConnectionFactory") LettuceConnectionFactory secondLettuceConnectionFactory) {

    return new StringRedisTemplate(secondLettuceConnectionFactory);
}

@Bean
public LettuceConnectionFactory secondLettuceConnectionFactory(@Value("${spring.second-redis.host}") String host,
                                                               @Value("${spring.second-redis.port}") int port,
                                                               @Value("${spring.second-redis.password:}") String password) {
    RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port);
    if (StringUtils.hasLength(password)) {
        config.setPassword(password);
    }

    return new LettuceConnectionFactory(config);
}
  • 測試效果
@Slf4j
@SpringBootApplication
public class MredisApplication implements ApplicationRunner {
    public static void main(String[] args) {
        SpringApplication.run(MredisApplication.class, args);
    }

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @Resource
    private StringRedisTemplate secondStringRedisTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        String name = stringRedisTemplate.opsForValue().get("name");
        log.info("name: {}", name);

        name = secondStringRedisTemplate.opsForValue().get("name");
        log.info("second name: {}", name);
    }
}

輸出日誌信息:

2021-08-19 14:52:12.770  INFO 91290 --- [           main] com.tenmao.mredis.MredisApplication      : name: null
2021-08-19 14:52:12.779  INFO 91290 --- [           main] com.tenmao.mredis.MredisApplication      : second name: tim2

可以看到已經讀取到了不同的redis數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章