当前位置: 首页 > article >正文

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


http://www.kler.cn/a/388672.html

相关文章:

  • ima.copilot-腾讯智能工作台
  • C++单例模式实现
  • 灰狼优化算法
  • 算法——二分查找(leetcode704)
  • gpu-V100显卡相关知识
  • 【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数
  • 基于SpringBoot和Vue的公司文档管理系统设计与开发(源码+定制+开发)
  • 如何使用Spring Cloud Gateway实现一个最简单的API网关示例
  • Docker入门系列——DockerFile的使用
  • 游戏引擎学习第四天
  • 杂七杂八之Swagger环境搭建(Java版本)
  • Spring Boot实现文件上传与OSS集成:从基础到应用
  • Go 使用 Redis 实现分布式锁
  • OpenAI CEO阿尔特曼预测AGI可能在五年内出现 对社会的影响远小于预期
  • ECharts 实现大屏地图功能
  • Kafka java 配置
  • Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测
  • Python的函数(补充浅拷贝和深拷贝)
  • 测试开发面试题记录
  • 拿下阿里云之后如何在本地运行镜像进行分析
  • 二维前缀和 子矩阵的和
  • 「iOS」——知乎日报第三周总结
  • 云财务SaaS财务软件源码
  • 深入理解智能合约 ABI
  • ORU 的 Open RAN 管理平面 (M 平面)
  • 词嵌入方法(Word Embedding)