自学内容网 自学内容网

SpringBoot连接多个redis

参考:

SpringBoot连接多个Redis或者Redis里的多个不同的库-CSDN博客

/**
 * redis配置类
 */
@Configuration
public class RedisConfig  {

    /**
     * retemplate相关配置
     * @return
     */
    @Bean(name = "redis1")
    public RedisTemplate<String, Object> createRedisTemplate() {
        return createTemplate("192.168.1.198", 6379, 1);
    }

    /**
     * retemplate相关配置
     * @return
     */
    @Bean(name = "redis2")
    public RedisTemplate<String, Object> createRedisTemplate2() {
        return createTemplate("192.168.217.129", 6379, 2);
    }

    /**
     * retemplate相关配置
     * @return
     */
    @Bean(name = "redis3")
    public RedisTemplate<String, Object> createRedisTemplate3() {
        return createTemplate("192.168.217.130", 6379, 3);
    }

    public RedisTemplate<String, Object> createTemplate(String ip, int port, int dataBase) {

        RedisTemplate<String, Object> template = new RedisTemplate<>();

        LettuceConnectionFactory factory = new LettuceConnectionFactory();
        factory.setHostName(ip);            // 设置Redis主机
        factory.setPort(port);              // 设置Redis端口
        // factory.setPassword("");            // 设置Redis密码(如果有)
        factory.setDatabase(dataBase);      // 设置Redis数据库索引,默认为0
        factory.setTimeout(2000);           // 设置连接超时(单位:毫秒)
        // 调用 afterPropertiesSet() 确保连接工厂正确初始化
        factory.afterPropertiesSet();
        template.setConnectionFactory(factory);

        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper om = new ObjectMapper();
        // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(om);

        // 值采用json序列化
        template.setValueSerializer(jacksonSeial);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());

        // 设置hash key 和value序列化模式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(jacksonSeial);
        template.afterPropertiesSet();

        return template;
    }
}

    //配置连接池的方法
    public RedisTemplate<String, Object> createTemplate2(String ip, int port, int dataBase) {

        // 创建 RedisTemplate
        RedisTemplate<String, Object> template = new RedisTemplate<>();

        // 配置连接池
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        poolConfig.setMaxTotal(8);  // 最大连接数
        poolConfig.setMaxIdle(4);   // 最大空闲连接数
        poolConfig.setMinIdle(2);   // 最小空闲连接数
        poolConfig.setTestOnBorrow(true);  // 获取连接时进行有效性检查

        // 配置 Lettuce 连接池
        LettucePoolingClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
                .poolConfig(poolConfig) // 设置连接池配置
                .build();

        // 配置 RedisStandaloneConfiguration(指定 Redis 的主机和端口)
        RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration(ip, port);
        redisConfig.setDatabase(dataBase);  // 设置 Redis 数据库索引

        // 创建 LettuceConnectionFactory,并传入连接池配置
        LettuceConnectionFactory factory = new LettuceConnectionFactory(redisConfig, clientConfig);

        // 设置连接超时(单位:毫秒)
        factory.setTimeout(2000);
        factory.afterPropertiesSet();  // 确保连接工厂正确初始化

        // 设置连接工厂到 RedisTemplate
        template.setConnectionFactory(factory);

        // 使用 Jackson2JsonRedisSerializer 来序列化和反序列化 Redis 的值
        Jackson2JsonRedisSerializer<Object> jacksonSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        template.setValueSerializer(jacksonSerializer);

        // 使用 StringRedisSerializer 来序列化和反序列化 Redis 的键
        template.setKeySerializer(new StringRedisSerializer());

        // 配置 Hash 类型的键和值的序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(jacksonSerializer);

        // 确保所有属性都正确设置
        template.afterPropertiesSet();

        return template;
    }


原文地址:https://blog.csdn.net/katz123451/article/details/143572747

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!