springboot整合redis集群
yls
2019-9-21
簡介
在springboot使用搭建好的redis集群
添加redis和連接池依賴
<!--redis連接池 start-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--redis連接池 end-->
<!--redis start-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<!--redis end-->
在配置文件中配置連接池和sentinel
ip: 39.97.234.52
spring:
redis:
lettuce:
pool:
max-active: 10
max-idle: 8
max-wait: -1ms
min-idle: 0
sentinel:
master: mymaster
nodes: ${ip}:26379,${ip}:26380,${ip}:26381
password: test@dbuser2018
添加redis配置類,修改springboot默認的redis序列化方式
@Configuration
public class RedisConfig {
/**
* 把任何數據保存到redis時,都需要進行序列化,默認使用JdkSerializationRedisSerializer進行序列化。
* 默認的序列化會給所有的key,value的原始字符前,都加了一串字符(例如:\xAC\xED\x00\),不具備可讀性
* 所以需要配置jackson序列化方式
*/
@Bean
public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory factory){
RedisTemplate<String,Object> template=new RedisTemplate<>();
template.setConnectionFactory(factory);
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);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
//value采用jackson序列化方式
template.setValueSerializer(jackson2JsonRedisSerializer);
//hash的key采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//hash的value采用String的序列化方式
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
創建redis服務
@Service
public class RedisServiceImpl implements RedisService {
@Autowired
private RedisTemplate redisTemplate;
@Override
public boolean put(String key, Object value, long seconds) throws JsonProcessingException {
redisTemplate.opsForValue().set(key, value, seconds, TimeUnit.SECONDS);
return true;
}
@Override
public <T> T get(String key, Class<T> clazz) throws IOException {
Object o = redisTemplate.opsForValue().get(key);
if (o != null) {
String json = String.valueOf(o);
T t = JsonUtil.stringToObject(json, clazz);
return t;
}
return null;
}
}
創建redisController測試redis服務
@RestController
public class RedisController {
@Autowired
private RedisService redisService;
@PostMapping(value = "put")
public String put(String key,String value,long seconds){
redisService.put(key,value,seconds);
return "ok";
}
@GetMapping(value = "get")
public Object get(String key){
Object o=redisService.get(key);
if(o!=null){
return String.valueOf(o);
}
return "not_ok";
}
}