Is the byte array a result of corresponding serialization for DefaultDeserializer?;EOFException

       异常堆栈信息:org.springframework.data.redis.serializer.SerializationException: Cannot deserialize;

nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload.

Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.EOFException:

       场景:jedis是redis的java客户端实现,项目中使用jedis的hincrBy函数实现特定变量的增长:

第一步:redisTemplate.hIncrBy(Constant.SMS_PHONE_PREFIX + tel, Constant.SMS_CHECK_ERROR_COUNT, 1L);

    第二步:我想要获取刚才的特定变量的值,调用

redisTemplate.hGet(Constant.SMS_PHONE_PREFIX + tel, Constant.SMS_CHECK_ERROR_COUNT);

然后就出错了,报错信息为上面红颜色的字体信息。hGet函数中错误的地方如下所示:

      首先调用的hGet函数的返回值不对,其次调错了方法,正确的方法如下:

      最后调用正常返回,再没出现过错误

redisTemplate.getHIncrBy(Constant.SMS_PHONE_PREFIX + tel, Constant.SMS_CHECK_ERROR_COUNT);

      结论:一定要注意调用的api是否对应,hset、hincrBy虽然都可以通过hget获取,但是项目中往往会对jedis的api进行封装,同是hget函数,可以封装为返回值是对象的方法,也可以封装为返回值是基本类型的包装类的方法,再加上封装的时候很可能使用了序列化机制,特别注意要调用对应的方法。

       在我的场景中,我对变量hincrBy时,获取时调用的是反序列化为T类型,而序列化器用的是spring的converter(将byte[]转为object),可能byte[]转string和转long不完全一样,我是这么理解的。对于网上的说的没有配置默认的反序列化器,我的情况并不是这样,只是对返回值处理错误,当然跟序列化肯定是有关系的,只是我的项目已经配了反序列化器,那就是使用错误。

 

     

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值