1.配置redis连接数据
package com.slb.elasticSearch.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
/**
* Created by sunlibao on 2018/6/25.
*/
@Configuration
@PropertySource("classpath:redis.properties")
public class RedisConfig {
/**
* 集群节点
*/
@Value("${redis.cluster.nodes}")
private String nodes;
/**
* 集群模式的最大重试数
*/
@Value("${redis.cluster.maxRedirects}")
private int maxRedirects;
/**
* 集群的链接模式
*/
@Value("${redis.cluster.mode}")
private String mode;
public String getNodes() {
return nodes;
}
public void setNodes(String nodes) {
this.nodes = nodes;
}
public int getMaxRedirects() {
return maxRedirects;
}
public void setMaxRedirects(int maxRedirects) {
this.maxRedirects = maxRedirects;
}
public String getMode() {
return mode;
}
public void setMode(String mode) {
this.mode = mode;
}
}
2.创建数据连接,连接中连接redis集群的方式和普通连接的方式不同。
package com.slb.elasticSearch.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/**
* Created by sunlibao on 2018/6/25.
*/
@Configuration
public class RedisConntion {
/**
* 分布式配置
*/
@Autowired
private RedisConfig defaultRedisConfig;
@Bean
public RedisConnectionFactory jedisConnectionFactory() {
List<RedisNode> redisNodes = new LinkedList<RedisNode>();
String nodes = defaultRedisConfig.getNodes();
for (String nodeStr : nodes.split(",")) {
String[] node = nodeStr.split(":");
String nodeAddr = node[0];
Integer nodePort = Integer.parseInt(node[1]);
RedisNode redisNode = new RedisNode(nodeAddr, nodePort);
redisNodes.add(redisNode);
}
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
redisClusterConfiguration.setClusterNodes(redisNodes);
redisClusterConfiguration.setMaxRedirects(defaultRedisConfig.getMaxRedirects());
return new JedisConnectionFactory(redisClusterConfiguration);
}
@Bean
public JedisCluster jedisCluster(){
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大连接数
poolConfig.setMaxTotal(1);
// 最大空闲数
poolConfig.setMaxIdle(1);
// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:
// Could not get a resource from the pool
poolConfig.setMaxWaitMillis(1000);
Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
String nodesStr = defaultRedisConfig.getNodes();
for (String nodeStr : nodesStr.split(",")) {
String[] node = nodeStr.split(":");
String nodeAddr = node[0];
Integer nodePort = Integer.parseInt(node[1]);
nodes.add(new HostAndPort(nodeAddr, nodePort));
}
JedisCluster cluster = new JedisCluster(nodes, poolConfig);
return cluster;
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory jedisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(jedisConnectionFactory);
return redisTemplate;
}
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory jedisConnectionFactory) {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(jedisConnectionFactory);
return stringRedisTemplate;
}
}