@Configuration
@Slf4j
public class RedissonConfigs {
@Autowired
private RedissonProperties properties;
@Bean
@ConditionalOnProperty(name = "spring.redis.host")
public RedissonClient redissonSingle() {
Config config = new Config();
config.setCodec(new org.redisson.client.codec.StringCodec());
String redisAddress = "redis:
SingleServerConfig singleServerConfig = config.useSingleServer().setAddress(redisAddress);
if (!StringUtils.isEmpty(properties.getPassword())) {
singleServerConfig.setPassword(properties.getPassword());
}
return Redisson.create(config);
}
@Bean
@ConditionalOnProperty(name = "spring.redis.sentinel.master")
public RedissonClient redissonSentinel() {
Config config = new Config();
config.setCodec(new org.redisson.client.codec.StringCodec());
SentinelServersConfig serverConfig = config.useSentinelServers()
.addSentinelAddress(getRedissonHostAddress(properties.getSentinel().getNodes()))
.setMasterName(properties.getSentinel().getMaster())
.setTimeout(properties.getTimeout())
.setMasterConnectionPoolSize(properties.getMasterConnectionPoolSize())
.setSlaveConnectionPoolSize(properties.getSlaveConnectionPoolSize());
if (!StringUtils.isEmpty(properties.getPassword())) {
serverConfig.setPassword(properties.getPassword());
}
return Redisson.create(config);
}
@Bean
@ConditionalOnProperty(name = "spring.redis.cluster.nodes")
public RedissonClient redissonCluster() {
Config config = new Config();
config.setCodec(new org.redisson.client.codec.StringCodec());
ClusterServersConfig clusterServersConfig = config.useClusterServers().setScanInterval(2000)
.addNodeAddress(getRedissonHostAddress(properties.getCluster().getNodes()));
if (!StringUtils.isEmpty(properties.getPassword())) {
clusterServersConfig.setPassword(properties.getPassword());
}
return Redisson.create(config);
}
private String[] getRedissonHostAddress(String[] hosts) {
String[] redissonHosts = new String[hosts.length];
int i = 0;
for (String host : hosts) {
redissonHosts[i] = "redis:
i++;
}
return redissonHosts;
}
}
@Data
@Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedissonProperties {
private int timeout = 3000
private String host
private String port
private String password
private int connectionPoolSize = 64
private int connectionMinimumIdleSize = 10
private int slaveConnectionPoolSize = 250
private int masterConnectionPoolSize = 250
private Sentinel sentinel
private Cluster cluster
@Data
public static class Sentinel {
private String[] nodes
private String master
}
@Data
public static class Cluster {
private String[] nodes
private int maxRedirects
}
}