如何动态连接不同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);
    ObjectMapper 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 正确配置并能正常工作。

关于我们

奈瑶·映南科技互联网学院是多元化综合资讯平台,提供网络资讯、运营推广经验、营销引流方法、网站技术、文学艺术范文及好站推荐等内容,覆盖多重需求,助力用户学习提升、便捷查阅,打造实用优质的内容服务平台。

搜索Search

搜索一下,你就知道。