springboot整合redis集群

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、效果


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值