如何动态连接不同Redis地址?

灵活连接Redis:自定义函数实现动态Redis连接

为了根据运行时参数连接不同的Redis实例,我们可以创建一个自定义函数,动态生成并返回 RedisTemplate 实例。

自定义函数代码

public static RedisTemplate getRedisTemplate(RedisConnectInfo info) {
    // 创建RedisStandaloneConfiguration
    RedisStandaloneConfiguration redisStandaloneConfiguration = buildRedisStandaloneConfiguration(info);

    RedisTemplate redisTemplate = new RedisTemplate<>();
    // 配置JSON序列化
    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
    ObjectMap

per objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); // 使用LettuceConnectionFactory redisTemplate.setConnectionFactory(new LettuceConnectionFactory( redisStandaloneConfiguration, LettuceClientConfiguration.builder().build() )); // 初始化配置 redisTemplate.afterPropertiesSet(); return redisTemplate; }

测试代码

@Test
public void testDynamicRedisConnection() {
    RedisTemplate redisTemplate = CacheUtils.getRedisTemplate(new RedisConfigInfo("127.0.0.1", "password", 6379));
    redisTemplate.opsForValue().set("foo", "bar");
}

重要提示:

使用 LettuceConnectionFactory 创建 RedisTemplate 时,务必调用 afterPropertiesSet() 方法完成初始化。 这确保了 RedisTemplate 正确配置并能正常工作。