1、引入maven配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
2、配置application.properties
# Redis服务器地址spring.redis.host=10.100.50.23
# Redis服务器连接端口
#spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
spring.redis.commandTimeout=5000

# redis.cluster
spring.redis.cluster.nodes=192.168.52.128:7001,192.168.52.128:7002,192.168.52.128:7003,192.168.52.128:7004,192.168.52.128:7005,192.168.52.128:7006
3、在启动类上开启缓存注解
@SpringBootApplication
@EnableCaching
public class RedisClusterSpringbootApplication {

public static void main(String[] args) {
SpringApplication.run(RedisClusterSpringbootApplication.class, args);
}
}
4、编写Redis配置类
package cn.itfeiyue.redisclusterspringboot.coonfig;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import java.net.UnknownHostException;
import java.util.HashSet;
import java.util.Set;

/**
* @Description: Redis配置类
* @Author: ZHANGPENGFEI
* @CreateDate: 2018/5/5 14:57
* @Version: 1.0
*/
@Configuration
@ConditionalOnClass({JedisCluster.class})
public class RedisConfig {

@Value("${spring.redis.cluster.nodes}")
private String clusterNodes;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.max-wait}")
private long maxWaitMillis;
@Value("${spring.redis.commandTimeout}")
private int commandTimeout;
@Bean
public JedisCluster getJedisCluster() {
String[] cNodes = clusterNodes.split(",");
Set<HostAndPort> nodes =new HashSet<>();
//分割出集群节点
for(String node : cNodes) {
String[] hp = node.split(":");
nodes.add(new HostAndPort(hp[0],Integer.parseInt(hp[1])));
}
JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
//创建集群对象
// JedisCluster jedisCluster = new JedisCluster(nodes,commandTimeout);
return new JedisCluster(nodes,commandTimeout,jedisPoolConfig);
}

/**
* 设置数据存入redis 的序列化方式
*</br>redisTemplate序列化默认使用的jdkSerializeable,存储二进制字节码,导致key会出现乱码,所以自定义
*序列化类
*
* @paramredisConnectionFactory
*/
@Bean
public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {
RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper =new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());

redisTemplate.afterPropertiesSet();

return redisTemplate;
}
}
5、编写Service接口
/**
* @Description: 测试Redis集群Service
* @Author: ZHANGPENGFEI
* @CreateDate: 2018/5/5 15:06
* @Version: 1.0
*/
public interface RedisClusterService {

public Object getValue(String key);
public String setInfo(String key,String value);
}
6、编写service实现
package cn.itfeiyue.redisclusterspringboot.service.impl;

import cn.itfeiyue.redisclusterspringboot.service.RedisClusterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.JedisCluster;

/**
* @Description: 测试Redis集群
* @Author: ZHANGPENGFEI
* @CreateDate: 2018/5/5 15:07
* @Version: 1.0
*/
@Service
public class RedisClusterServiceImpl implements RedisClusterService {

//注入JedisCluster
@Autowired
JedisCluster jedisCluster;


@Override
public Object getValue(String key) {
return jedisCluster.get(key);
}

@Override
public String setInfo(String key, String value) {
String set = jedisCluster.set(key, value);
return set;
}
}
7、编写Controller
package cn.itfeiyue.redisclusterspringboot.controller;

import cn.itfeiyue.redisclusterspringboot.service.RedisClusterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
* @Description: 测试redis集群
* @Author: ZHANGPENGFEI
* @CreateDate: 2018/5/5 15:04
* @Version: 1.0
*/
@Controller
@RequestMapping("redisCluster")
public class RedisClusterController {

@Autowired
RedisClusterService redisClusterService;

/**
* 根据键获取redis中对应的值
* @param key
* @return
*/
@ResponseBody
@RequestMapping("/get")
public Object getValue(String key){
Object value = redisClusterService.getValue(key);
return value;
}

/**
* redis集群中存入值
* @param key
* @param value
* @return
*/
@ResponseBody
@RequestMapping("/set")
public String setInfo(String key,String value){
try {
String set = redisClusterService.setInfo(key,value);
return "已存入缓存。。。"+set;
} catch (Exception e) {
e.printStackTrace();
return "缓存存入失败。。。";
}
}
}
8、效果
springboot整合redis集群

相关文章: