为了使服务能够高可用将普通业务和生成分布式唯一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;