RedissonConfig.java
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.ClusterServersConfig;
import org.redisson.config.Config;
import org.redisson.config.SentinelServersConfig;
import org.redisson.config.SingleServerConfig;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
@Slf4j
@Configuration
public class RedissonConfig {
@Resource
private RedisProperties redisProperties;
private int connectionPoolSize = 64;
private int connectionMinimumIdleSize = 10;
private int pingConnectionInterval = 60000;
private static String ADDRESS_PREFIX = "redis://";
@Bean(destroyMethod = "shutdown")
public RedissonClient redissonClient() {
RedisProperties.Sentinel sentinel = redisProperties.getSentinel();
if (Objects.nonNull(sentinel)) {
log.info("redis is sentinel mode");
return redissonSentinel();
}
RedisProperties.Cluster cluster = redisProperties.getCluster();
if (Objects.nonNull(cluster)) {
log.info("redis is cluster mode");
return redissonCluster();
}
String host = redisProperties.getHost();
if (StringUtils.isNotBlank(host)) {
log.info("redis is single mode");
return redissonSingle();
}
log.error("redisson config can not support this redis mode");
return null;
}
private RedissonClient redissonSingle() {
String host = redisProperties.getHost();
String password = redisProperties.getPassword();
int port = redisProperties.getPort();
Config config = new Config();
SingleServerConfig serverConfig = config.useSingleServer()
.setAddress(ADDRESS_PREFIX + host + ":" + port)
.setPingConnectionInterval(pingConnectionInterval)
.setConnectionPoolSize(this.connectionPoolSize)
.setConnectionMinimumIdleSize(this.connectionMinimumIdleSize);
if (!StringUtils.isEmpty(password)) {
serverConfig.setPassword(password);
}
return Redisson.create(config);
}
private RedissonClient redissonSentinel() {
String masterName = redisProperties.getSentinel().getMaster();
List<String> nodes = redisProperties.getSentinel().getNodes();
String password = redisProperties.getPassword();
Config config = new Config();
SentinelServersConfig sentinelServersConfig = config.useSentinelServers();
sentinelServersConfig.setScanInterval(2000);
if (!StringUtils.isEmpty(password)) {
sentinelServersConfig.setPassword(password);
}
sentinelServersConfig.setMasterName(masterName);
String[] nodeArr = nodes.toArray(new String[nodes.size()]);
for (int i = 0; i < nodeArr.length; i++) {
nodeArr[i] = ADDRESS_PREFIX + nodeArr[i];
}
sentinelServersConfig.addSentinelAddress(nodeArr);
return Redisson.create(config);
}
private RedissonClient redissonCluster() {
List<String> nodes = redisProperties.getCluster().getNodes();
String password = redisProperties.getPassword();
Config config = new Config();
ClusterServersConfig clusterServersConfig = config.useClusterServers();
clusterServersConfig.setScanInterval(2000);
if (!StringUtils.isEmpty(password)) {
clusterServersConfig.setPassword(password);
}
for (String node : nodes) {
clusterServersConfig.addNodeAddress(ADDRESS_PREFIX + node);
}
return Redisson.create(config);
}
}
YAML配置
1、单机部署/主从部署
spring:
redis:
database: 1
host: 192.168.0.111
password: 123456
port: 6379
timeout: 3000
2、哨兵部署
spring:
redis:
database: 1
password: 123456
port: 6379
sentinel:
master: mymaster
nodes:
- 192.168.0.111:26379
- 192.168.0.112:26379
- 192.168.0.113:26379
password: 123456
timeout: 10000ms
3、集群部署
spring:
redis:
password: 123456
database: 1
cluster:
nodes:
- 192.168.0.111:6379
- 192.168.0.112:6379
- 192.168.0.113:6379
timeout: 3000ms