SpringBoot配置多个Redis数据源

1. 导入依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.9.0</version>
        </dependency>

2.编写配置信息

redisManagement:
  dbnum: 2
  redis1:
    database: 0
    host: localhost
    password:
    port: 6379
    timeout: 0
  redis2:
    database: 1
    host: localhost
    password:
    port: 6379
    timeout: 0

3. 编写RedisManager

@Configuration
public class RedisManagment {
    Logger logger = LogManager.getLogger(RedisManagment.class);

    @Value("${redisManagement.dbnum}")
    private int maxnum;

    @Autowired
    private Environment environment;

    @Bean("redisConnections")
    public StringRedisTemplate[] RedisConnections(){
        logger.info("###### START 初始化 Redis 连接池 START ######");
        StringRedisTemplate[] dbs = new StringRedisTemplate[maxnum];
        for (int i = 0; i < maxnum; i++) {
            String pre = "redisManagement.redis"+(i+1)+".";
            dbs[i] = redisTemplateObject(i,environment.getProperty(pre+"host"),environment.getProperty(pre+"password"),
                    environment.getProperty(pre+"port",Integer.class));
        }
        logger.info("###### END 初始化 Redis 连接池 END ######");
        return dbs;
    }

    private StringRedisTemplate redisTemplateObject(Integer dbIndex,String host,String pwd,int port) {
        StringRedisTemplate redisTemplateObject = new StringRedisTemplate();
        redisTemplateObject.setConnectionFactory(redisConnectionFactory(jedisPoolConfig(), dbIndex,host,pwd,port));
        setSerializer(redisTemplateObject);
        redisTemplateObject.afterPropertiesSet();
        return redisTemplateObject;
    }

    /**
     * 连接池配置信息
     */
    private JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setTestOnBorrow(true);
        poolConfig.setTestOnReturn(true);
        poolConfig.setTestWhileIdle(true);
        poolConfig.setNumTestsPerEvictionRun(10);
        poolConfig.setTimeBetweenEvictionRunsMillis(60000);
        // 当池内没有可用的连接时,最大等待时间
        poolConfig.setMaxWaitMillis(10000);
        // ------其他属性根据需要自行添加-------------
        return poolConfig;
    }

    /**
     * jedis连接工厂
     */
    private RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig, int db,String hostName,String passWord,int port) {
        // 单机版jedis
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        // 设置redis服务器的host或者ip地址
        redisStandaloneConfiguration.setHostName(hostName);
        // 设置默认使用的数据库
        redisStandaloneConfiguration.setDatabase(db);
        // 设置密码
        redisStandaloneConfiguration.setPassword(RedisPassword.of(passWord));
        // 设置redis的服务的端口号
        redisStandaloneConfiguration.setPort(port);

        // 获得默认的连接池构造器
        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration
                .builder();
        // 指定jedisPoolConifig来修改默认的连接池构造器)
        jpcb.poolConfig(jedisPoolConfig);
        // 通过构造器来构造jedis客户端配置
        JedisClientConfiguration jedisClientConfiguration = jpcb.build();
        // 单机配置 + 客户端配置 = jedis连接工厂
        JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
        //JedisConnectionFactory需要调用AfterProperties初始化
        factory.afterPropertiesSet();
        return factory;
    }

    /**
     * 设置序列化
     */
    private void setSerializer(StringRedisTemplate template) {
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    }

}

4. 测试

@SpringBootTest
class SellcloudApplicationTests {
    @Resource(name = "redisConnections")
    StringRedisTemplate[] templates;

    @Test
    void EnvironmentTest(){
        templates[0].delete("hzkey");
        templates[1].delete("hzkey");
        for (int i = 0; i < templates.length; i++) {
            StringRedisTemplate db = templates[i];
            System.out.println(db.opsForValue().get("hzkey"));
            db.opsForValue().set("hzkey","hzvalue");
            System.out.println(db.opsForValue().get("hzkey"));
        }
    }
}

参考链接:https://blog.csdn.net/jjjackjack/article/details/122959435

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值