为了使服务能够高可用将普通业务和生成分布式唯一id的业务使用的redis分开,避免因为普通业务的读写对redis造成容量、稳定性的影响,所以单独为生成id业务申请了一个redis集群。

pom.xml

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>

common

@Configuration
public class RedisConfig {

    @Value("#{'${common.redis.nodes}'.split(',')}")
    private List<String> nodes;
    @Value("${common.redis.password}")
    private String password;

    @Bean
    public JedisCluster jedisCluster() {
        Set<HostAndPort> nodeSet = new HashSet<>();
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();

        // 最大空闲连接数, 默认8个
        config.setMaxIdle(10);

        // 最大连接数, 默认8个
        config.setMaxTotal(30);

//        每次释放连接的最大数目
        config.setNumTestsPerEvictionRun(1024);

        // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,
        // 默认-1
        config.setMaxWaitMillis(1500);

        // 逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
        config.setMinEvictableIdleTimeMillis(100000);

        // 最小空闲连接数, 默认0
        config.setMinIdle(5);

        // 对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数
        // 时直接逐出,不再根据MinEvictableIdleTimeMillis判断 (默认逐出策略)
        config.setSoftMinEvictableIdleTimeMillis(10000);

        // 在获取连接的时候检查有效性, 默认false
        config.setTestOnBorrow(false);

        // 在空闲时检查有效性, 默认false
        config.setTestWhileIdle(true);

        // 逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
        config.setTimeBetweenEvictionRunsMillis(30000);

        config.setBlockWhenExhausted(false);

        for(String node : nodes) {
            String[] split = node.split(":");
            nodeSet.add(new HostAndPort(split[0],Integer.valueOf(split[1])));
        }
//        connectionTimeout:表示连接超时时间,soTimeout:表示读取数据超时时间,maxAttempts:表示出现异常最大重试次数
        return new JedisCluster(nodeSet, 10000, 10000, 3, password, config);
    }
}

id

@Configuration
public class FidRedisConfig {

    @Value("#{'${fid.redis.nodes}'.split(',')}")
    private List<String> nodes;
    @Value("${fid.redis.password}")
    private String password;

    @Bean
    public JedisCluster fidJedisCluster() {
        Set<HostAndPort> nodeSet = new HashSet<>();
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();

        // 最大空闲连接数, 默认8个
        config.setMaxIdle(10);

        // 最大连接数, 默认8个
        config.setMaxTotal(30);

//        每次释放连接的最大数目
        config.setNumTestsPerEvictionRun(1024);

        // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,
        // 默认-1
        config.setMaxWaitMillis(1500);

        // 逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
        config.setMinEvictableIdleTimeMillis(100000);

        // 最小空闲连接数, 默认0
        config.setMinIdle(5);

        // 对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数
        // 时直接逐出,不再根据MinEvictableIdleTimeMillis判断 (默认逐出策略)
        config.setSoftMinEvictableIdleTimeMillis(10000);

        // 在获取连接的时候检查有效性, 默认false
        config.setTestOnBorrow(false);

        // 在空闲时检查有效性, 默认false
        config.setTestWhileIdle(true);

        // 逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
        config.setTimeBetweenEvictionRunsMillis(30000);

        config.setBlockWhenExhausted(false);

        for(String node : nodes) {
            String[] split = node.split(":");
            nodeSet.add(new HostAndPort(split[0],Integer.valueOf(split[1])));
        }
//        connectionTimeout:表示连接超时时间,soTimeout:表示读取数据超时时间,maxAttempts:表示出现异常最大重试次数
        return new JedisCluster(nodeSet, 10000, 10000, 3, password, config);
    }
}

properties

common.redis.nodes=
common.redis.password=
fid.redis.nodes=
fid.redis.password=

使用:

@Autowired
private JedisCluster jedisCluster;

@Autowired
private JedisCluster fidJedisCluster;