当前位置: 首页 > 知识库问答 >
问题:

java - Redis Hash结构存储Long取出为Integer原因及解决方案?

余歌者
2024-06-26

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

@Configurationpublic 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个答案

封烈
2024-06-26

序列化器的问题,配置类改为的序列化器改为GenericFastJsonRedisSerializer就好了

 类似资料:
  • 本文向大家介绍java 出现NullPointerException的原因及解决办法,包括了java 出现NullPointerException的原因及解决办法的使用技巧和注意事项,需要的朋友参考一下 java 出现NullPointerException的原因及解决办法 日常开发过程中,最常见的异常莫过于NullPointerException,之前的时候,只是知道去找到报错的位置,然后去解决

  • 本文向大家介绍Java String.replace()方法"无效"的原因及解决方式,包括了Java String.replace()方法"无效"的原因及解决方式的使用技巧和注意事项,需要的朋友参考一下 首先我们来看个例子 运行结果是什么呢?我们先看看这个方法的api 返回一个新的字符串,用newChar替换此字符串中出现的所有oldChar 所以这里的结果为:输出结果是abcd 而不是fbcd,

  • 本文向大家介绍javascript跨域原因以及解决方案分享,包括了javascript跨域原因以及解决方案分享的使用技巧和注意事项,需要的朋友参考一下 产生跨域问题的原因 跨域问题是浏览器同源策略限制,当前域名的js只能读取同域下的窗口属性。 跨域问题产生的场景 当要在在页面中使用js获取其他网站的数据时,就会产生跨域问题,比如在网站中使用ajax请求其他网站的天气、快递或者其他数据接口时以及hy

  • 本文向大家介绍详谈php ip2long 出现负数的原因及解决方法,包括了详谈php ip2long 出现负数的原因及解决方法的使用技巧和注意事项,需要的朋友参考一下 php提供了ip2long与long2ip方法对ip地址处理。 1、ip2long — 将一个IPV4的字符串互联网协议转换成数字格式 int ip2long ( string $ip_address ) 参数: ip_addres

  • 本文向大家介绍浅谈vue在html中出现{{}}的原因及解决方式,包括了浅谈vue在html中出现{{}}的原因及解决方式的使用技巧和注意事项,需要的朋友参考一下 原因: 浏览器渲染机制,解析html结构 -> 加载外部脚本和样式表文件 -> 解析并执行脚本代码 -> 构造html dom模型 -> 加载图片等外部文件 -> 页面加载完毕。 初始化vue的js写在页面底部,也就是最后才执行js脚本

  • 本文向大家介绍MySQL 出现错误1418 的原因分析及解决方法,包括了MySQL 出现错误1418 的原因分析及解决方法的使用技巧和注意事项,需要的朋友参考一下 MySQL 出现错误1418 的原因分析及解决方法 具体错误:  使用mysql创建、调用存储过程,函数以及触发器的时候会有错误符号为1418错误。 ERROR 1418 (HY000): This function has none