@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
ObjectMapper objectMapper = new ObjectMapper();
//JsonAutoDetect.Visibility.ANY 代表所有属性或字段都可以序列化
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//新版用法
//以数组的方式存放到Redis,Class Type 全类名作为为第一个元素,Json字符串为第二个元素。
objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
//老版用法,已弃用
//objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
// 日期序列化处理
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule())
.registerModule(new ParameterNamesModule());
//serializer.setObjectMapper(objectMapper);
GenericJackson2JsonRedisSerializer serializer=
new GenericJackson2JsonRedisSerializer(objectMapper);
template.setKeySerializer(RedisSerializer.string());
template.setValueSerializer(serializer);
template.setHashKeySerializer(RedisSerializer.string());
template.setHashValueSerializer(serializer);
return template;
}
@Bean
public ValueOperations<Object,Object> valueOperations(RedisTemplate<Object,Object> redisTemplate){
return redisTemplate.opsForValue();
}
@Bean
public HashOperations<Object,Object,Object> hashOperations(RedisTemplate<Object,Object> redisTemplate){
return redisTemplate.opsForHash();
}
@Bean
public ZSetOperations<Object,Object> zSetOperations(RedisTemplate<Object,Object> redisTemplate){
return redisTemplate.opsForZSet();
}
@Bean
public SetOperations<Object,Object> setOperations(RedisTemplate<Object,Object> redisTemplate){
return redisTemplate.opsForSet();
}
@Bean
public ListOperations<Object,Object> listOperations(RedisTemplate<Object,Object> redisTemplate){
return redisTemplate.opsForList();
}
}