springboot使用redis集群整合redisTemplate
找了好久都没有找到相关的资料,所以就根据xml配置redis集群的方式,自己对比源码搞了一下,成功整合。分享一下
直接贴出代码:
代码中的参数都是通过
@Value注解进行注入
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
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.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.client.RestTemplate;
import java.util.HashSet;
import java.util.Set;
/**
使用redis集群或者单机初始化redisTemplate
*/
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Value("${redis.model:single}")
private String model;
@Value("${redis.cluster:127.0.0.1:6379}")
private String clusterNodes;
@Value("${redis.single:127.0.0.1:6379}")
private String singNode;
@Value("${redis.password:111111}")
private String password;
/**
* Redis集群的配置
*
* @return RedisClusterConfiguration
* @throws
*/
@Bean
public RedisClusterConfiguration redisClusterConfiguration() {
RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
String[] serverArray = clusterNodes.split(",");
Set<RedisNode> nodes = new HashSet<RedisNode>();
for (String ipPort : serverArray) {
String[] ipAndPort = ipPort.split(":");
nodes.add(new RedisNode(ipAndPort[0].trim(), Integer.valueOf(ipAndPort[1])));
}
redisClusterConfiguration.setClusterNodes(nodes);
return redisClusterConfiguration;
}
/**
* @param
* @return
* @Description:redis连接工厂类
* @date 2018/10/25 19:45
*/
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory factory = null;
//集群模式
if (StringUtils.equals("cluster", model)) {
factory = new JedisConnectionFactory(redisClusterConfiguration());
} else {
String[] ipAndPort = singNode.split(":");
factory = new JedisConnectionFactory();
factory.setHostName(ipAndPort[0]);
factory.setPassword(password);
factory.setPort(Integer.parseInt(ipAndPort[1]));
}
factory.setUsePool(true);
return factory;
}
/**
* 实例化 RedisTemplate 对象
*
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
initDomainRedisTemplate(redisTemplate);
return redisTemplate;
}
/**
* 设置数据存入 redis 的序列化方式,并开启事务
*/
private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setEnableTransactionSupport(false);
redisTemplate.setConnectionFactory(jedisConnectionFactory());
}
/**
* @param
* @return
* @Description:redis缓存管理器
* @date 2018/10/25 21:18
*/
@Override
@Bean
public RedisCacheManager cacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
redisCacheManager.setUsePrefix(true);
return redisCacheManager;
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
redis配置文件配置如下:
##redis集群
spring.redis.cluster.nodes=168.181.211.220:6379,168.181.211.221:6380,168.181.211.222:6379,168.181.211.223:6380,168.181.211.225:6379,168.181.211.228:6380
spring.redis.cluster.max-redirects=6
#客户端超时时间单位是毫秒 默认是2000
redis.timeout=10000
#最大空闲数
redis.maxIdle=300
#控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
redis.maxTotal=1000
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWaitMillis=1000
#连接的最小空闲时间 默认1800000毫秒(30分钟)
redis.minEvictableIdleTimeMillis=300000
#每次释放连接的最大数目,默认3
redis.numTestsPerEvictionRun=1024
#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
redis.timeBetweenEvictionRunsMillis=30000
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
redis.testOnBorrow=true
#在空闲时检查有效性, 默认false
redis.testWhileIdle=true
在需要使用redisTemplate的地方直接注入即可使用:
@Autowired
RedisTemplate<String, Object> redisTemplate; //泛型可以根据自己的需求进行定义
还没有评论,来说两句吧...