在 springboot 1.5.x版本的默认的Redis客户端是 Jedis实现的,springboot 2.x版本中默认客户端是用 lettuce实现的。
添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
</dependencies>
配置
spring:
redis:
lettuce:
shutdown-timeout: 100
pool:
max-active: 200
max-wait: 30
max-idle: 8
min-idle: 8
port: 6379
cluster:
nodes: '10.0.17.15:36379,10.0.17.15:36479,10.0.17.15:36579'
自定义redisTemplate
@Configuration
@EnableAutoConfiguration
@Slf4j
public class RedisConfig {
@Bean("redisTemplate")
public RedisTemplate<String, Object> getRedisTemplate(LettuceConnectionFactory connectionFactory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(connectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 设置value的序列化规则
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// 设置key序列-String序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
使用
public PaidMemberCardDTO findByActiveUser(Long userId) {
PaidMemberCardDTO card = (PaidMemberCardDTO) redisTemplate.opsForValue().get(RedisConstant.PAID_MEMBER_CARD + userId);
if (card == null) {
card = memberCardMapper.findActiveCardByUser(userId);
redisTemplate.opsForValue().set(RedisConstant.ACTIVE_CARD + userId,
}
}
return card;
}