Redis Hash结构存储Long取出为Integer原因及解决方案?
Redis库使用的是spring-boot-data-redis,Redis的Hash结构存储Long数字类型,但取出来的是Integer,不用Hash直接存,取的就是Long,这是为什么?有办法Hash取的也是Long吗
直接存:存到hash中:存储hash的代码:
private void setArticleActiveHash(Long articleId) {
String key = "article_active:"+ articleId;
Map<String, Long> articleActiveMap = new HashMap<>();
articleActiveMap.put("love", 0L);
articleActiveMap.put("commentCount", 0L);
articleActiveMap.put("watch", 0L);
articleActiveMap.put("collectionCount", 0L);
articleActiveMap.put("articleId",articleId);
redisCache.setCacheMap(key,articleActiveMap);
}
RedisConfig
@Configuration
public class RedisConfig {
@Resource(type = RedisConnectionFactory.class)
private RedisConnectionFactory redisConnectionFactory;
@Primary
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
// 解决反序列化 LocalDateTime 的错误
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// 解决 LocalDateTime 序列化失败的问题
objectMapper.registerModule(new JavaTimeModule());
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.activateDefaultTyping(
LaissezFaireSubTypeValidator.instance,
ObjectMapper.DefaultTyping.NON_FINAL,
JsonTypeInfo.As.WRAPPER_ARRAY);
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 序列化方式采用 jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
虽然可以拿到后转Long,但每次都转好麻烦
回复
1个回答
test
2024-06-25
序列化器的问题,配置类改为的序列化器改为GenericFastJsonRedisSerializer就好了
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容