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