数据库
首页 > 数据库> > 翻车现场:解决redis使用increment自增方法时报错ERR value is not a valid float

翻车现场:解决redis使用increment自增方法时报错ERR value is not a valid float

作者:互联网

问题:

ERR value is not a valid float

 

原因:

Spring对Redis序列化的策略有两种,分别是StringRedisTemplate和RedisTemplate,其中StringRedisTemplate用于操作字符串,RedisTemplate使用的是JDK默认的二进制序列化。

RedisTemplate是使用的JdkSerializationRedisSerializer序列化,序列化后的值包含了对象信息,版本号,类信息等,是一串字符串,所以无法进行数值自增操作。

(使用RedisTemplate 存进去的数据都是二进制的)

而StringRedisTemplate序列化策略是字符串的值直接转为字节数组,所以存储到redis中是数值,所以可以进行自增操作。

 

 

解决:

当然也不是一定要使用StringRedisTemplate才能自增实现,可以在启动器中加入以下代码即可实现RedisTemplate自增:

    /**
     * 设置 redisTemplate 的序列化设置
     * 解决incr自增方法不能自增问题
     * @param
     * @return
     */
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        //定义value的序列化方式
        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);

        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

 

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

注: 如果本篇有需要改进的地方或错误,欢迎大神们指定一二~~

标签:自增,ERR,float,om,template,序列化,StringRedisTemplate,RedisTemplate
来源: https://blog.csdn.net/qq_43705131/article/details/114239558