【Redis】Redis配置多数据源

Redis配置多数据源

一般来说单个服务都是只配置一个Redis地址端口指定数据库和一个关系型数据库。

但是也偶尔会出现一个服务需要连接不同的两个或以上的Redis地址进行读写数据,比如说最近的公司需求:员工分散在两个相似的单体服务,在新增员工时,要保证在两个数据库内的工号不重复且自增。
在这里插入图片描述

其实这种情况我觉得还是利用消息队列如RabbitMQ好处理的,但苦于目前的小中台内没有搭建完善的消息队列,所以暂时还是只能从数据源下手,再考虑到暂时以后也不会再新增类似服务,且管理新增员工的同事只有一个人,所以暂时不考虑并发情况了。

这个实现过程很简单,只不过是放在Nacos中的配置文件加多一个Redis连接地址、端口、需要用的数据库,之后在RedisConfig类再加一个数据源初始化的方法就完事了。

Java代码如下:

@Configuration
public class RedisTemplateConfig {
    /**
     * @description: 第一个数据源
     */
    @Value("${spring.redis.first.host}")
    private String firstHost;

    @Value("${spring.redis.first.port}")
    private String firstPort;

    @Value("${spring.redis.first.database}")
    private int firstDatabase;

    /**
     * @description: 第二个数据源
     */
    @Value("${spring.redis.second.host}")
    private String secondHost;

    @Value("${spring.redis.second.port}")
    private String secondPort;

    @Value("${spring.redis.second.database}")
    private int secondDatabase;

    //最大空闲连接数
    private static final int MAX_IDLE = 200;
    //最大连接数
    private static final int MAX_TOTAL = 1024;
    //建立连接最长等待时间
    private static final long MAX_WAIT_MILLIS = 10000;


    /**
     *
     * @description: 配置工厂
     */
    public RedisConnectionFactory connectionFactory(String host, int port, String password, int maxIdle,
                                                    int maxTotal, long maxWaitMillis, int index) {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.setHostName(host);
        jedisConnectionFactory.setPort(port);

        if (!StringUtils.isEmpty(password)) {
            jedisConnectionFactory.setPassword(password);
        }

        if (index != 0) {
            jedisConnectionFactory.setDatabase(index);
        }

        jedisConnectionFactory.setPoolConfig(poolConfig(maxIdle, maxTotal, maxWaitMillis, false));
        jedisConnectionFactory.afterPropertiesSet();
        return jedisConnectionFactory;
    }

    /**
     *
     * @description: 连接池配置
     */
    public JedisPoolConfig poolConfig(int maxIdle, int maxTotal, long maxWaitMillis, boolean testOnBorrow) {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(maxIdle);
        poolConfig.setMaxTotal(maxTotal);
        poolConfig.setMaxWaitMillis(maxWaitMillis);
        poolConfig.setTestOnBorrow(testOnBorrow);
        return poolConfig;
    }


    /**
     *
     * @description: 第一个数据源初始化
     */
    @Bean(name = "redisFirstTemplate")
    public StringRedisTemplate redisOrderTemplate() {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(
                connectionFactory(firstHost, Integer.parseInt(firstPort), "", MAX_IDLE, MAX_TOTAL, MAX_WAIT_MILLIS, firstDatabase));
        return template;
    }

    /**
     *
     * @description: 第二个数据源初始化
     */
    @Bean(name = "redisSecondTemplate")
    public StringRedisTemplate userUserTemplate() {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(
                connectionFactory(secondHost, Integer.parseInt(secondPort), "", MAX_IDLE, MAX_TOTAL, MAX_WAIT_MILLIS, secondDatabase));
        return template;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值