在用stringRedisTemplate.opsForSet().isMember(key,value)判断key中是否存在value值时,明明存在值却一直返回false,原来是因为redis的序列化方式有问题.
检查原来的序列化使用的是template.setValueSerializer(jackson2JsonRedisSerializer);
数值存储方式也不要直接使用json序列化,string序列化方式就可以了,更改上边序列化方式template.setValueSerializer(stringRedisSerializer);
序列化方式优化如下,解决上述问题
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory){
RedisTemplate template = new RedisTemplate <>();
template.setConnectionFactory(factory);
//替换默认序列化的方式
//1.设置key的序列化方式为string
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//1.1设置key的序列化方式为string
template.setKeySerializer(stringRedisSerializer);
//1.2设置hash key的序列化方式为string
template.setHashKeySerializer(stringRedisSerializer);
//2.设置value的序列化方式
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);
//2.1设置value的序列化方式为string
template.setValueSerializer(stringRedisSerializer);
//2.2设置hash value的序列化方式为json
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}