集群版本的优势便不再提,此处阐述下如何使用Jedis连接redis集群。
一、相关依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
二、相关配置
yml中添加以下配置:
redis:
cluster:
timeOut: 7200
soTimeOut: 7200
maxAttempts: 6
password: redispwd123
maxIdle: 2000
maxWaitMillis: 5000
nodes:
- 127.0.0.1:6391
- 127.0.0.1:6392
- 127.0.0.1:6393
- 127.0.0.1:6394
- 127.0.0.1:6395
- 127.0.0.1:6396
ip地址按照集群地址配置。
三、JedisCluster配置
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import java.util.HashSet;
import java.util.Set;
@Component
@ConfigurationProperties(prefix = "redis.cluster")
public class RedisProperties {
private String[] nodes;
private String password;
private int timeOut;
private int maxAttempts;
private int soTimeOut;
private int maxIdle;
private long maxWaitMillis;
public String[] getNodes() {
return nodes;
}
public void setNodes(String[] nodes) {
this.nodes = nodes;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getTimeOut() {
return timeOut;
}
public void setTimeOut(int timeOut) {
this.timeOut = timeOut;
}
public int getMaxAttempts() {
return maxAttempts;
}
public void setMaxAttempts(int maxAttempts) {
this.maxAttempts = maxAttempts;
}
public int getSoTimeOut() {
return soTimeOut;
}
public void setSoTimeOut(int soTimeOut) {
this.soTimeOut = soTimeOut;
}
public int getMaxIdle() {
return maxIdle;
}
public void setMaxIdle(int maxIdle) {
this.maxIdle = maxIdle;
}
public long getMaxWaitMillis() {
return maxWaitMillis;
}
public void setMaxWaitMillis(long maxWaitMillis) {
this.maxWaitMillis = maxWaitMillis;
}
@Bean
public JedisCluster redisClusterFactory(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
Set<HostAndPort> hostAndPorts = new HashSet<>(1<<4);
for (String str:nodes){
hostAndPorts.add(new HostAndPort(str.split(":")[0], Integer.valueOf(str.split(":")[1])));
}
return new JedisCluster(hostAndPorts, timeOut, soTimeOut, maxAttempts, password, jedisPoolConfig);
}
}
四、操作redis
public class RedisDataSourceImpl implements RedisDataSource {
private static final Logger logger = LoggerFactory.getLogger(RedisDataSourceImpl.class);
@Autowired
private JedisCluster jedisCluster;
@Override
public void putInfo(String key, String value){
try{
jedisCluster.hset(key, value);
logger.info("已存入redis中:" + key);
}catch (Exception e){
logger.error("推redis异常:", e);
}
}
}
操作区别不大,这里只是举个例子,集群版相较于单机版增容和容错都好上不少。