Hello! 欢迎来到小浪资源网!

Redis存储点赞数据时,参数类型转换错误如何解决?


Redis存储点赞数据时,参数类型转换错误如何解决?

相关文章:redis存储数据时遇到参数类型转换的问题?

当向 redis 中存储数据时,如果遇到的参数类型转换问题,通常是因为存储的值类型redis数据类型不匹配。redis 主要使用字符串String)类型来存储数据,但它也支持其他类型,如整数、浮点数、列表和哈希等。

问题描述:

  • 要存储点赞的数据,包括:

    • 点赞用户 id(likeuserid)
    • 被点赞文章 id(likepostid)
    • 被点赞回答 id(likeanswerid)

这些值在后端传入时是字符串类型,但当存储到 redis 中时遇到了类型转换错误。

错误信息:

Java.lang.classcastexception: java.lang.integer cannot be cast to java.lang.string

原因分析:

错误信息表明,在存储过程中发生了类型转换异常,将 Integer 值转换为 string 值失败。这是因为 constant.redis_like_code 在后端是一个 integer 类型,而 redis 的哈希值序列化配置为 stringredisserializer,无法直接存储整数值。

解决方案:

有两种方法可以解决这个问题:

  1. 将 constant.redis_like_code 改为 string 类型:

    public static final string redis_like_code = "1";

    这样,存储的值就是字符串类型,与 redis 的数据类型匹配,就不会发生类型转换错误。

  2. 修改 redis 的哈希值序列化配置为支持整数:

    在 redisconfig 中,修改 lettuceconnectionfactory 的序列化配置:

    @Bean public RedisConnectionFactory redisConnectionFactory(LettuceClientConfiguration lettuceClientConfiguration) {     return new LettuceConnectionFactory(RedisProperties.createRedisConfiguration(jedisPoolConfig), lettuceClientConfiguration); }  @Bean public LettuceClientConfiguration lettuceClientConfiguration() {     return LettuceClientConfiguration.builder()             .setKeySerializer(new StringRedisSerializer())             .setValueSerializer(new IntegerRedisSerializer())             .build(); }

    这样,redis 的哈希值序列化器就会使用 integerredisserializer,可以存储和获取整数值,避免了类型转换错误。

注意:

  • 第一种方法比较简单,但如果需要存储其他不同类型的数据,则需要维护多种序列化配置。
  • 第二种方法比较灵活,可以根据不同的业务需求选择不同的序列化器。

相关阅读