当前位置: 首页 > 图灵资讯 > 技术篇> Redis点赞功能中Integer类型转换异常如何排查?

Redis点赞功能中Integer类型转换异常如何排查?

来源:图灵教育
时间:2025-03-07 20:28:29

redis点赞功能中integer类型转换异常如何排查?

在Redis点赞功能中,Integer类型转换异常

在使用Redis存储拇指数据时,经常会遇到类型转换异常。本文分析并解决了java的实际案例.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String异常。

这个问题出现在一个喜欢的功能中。后端接收喜欢用户的信息(喜欢用户ID)、被表扬的文章ID和被表扬的回答ID)并存储在Redis中。传输的数据类型是字符串,但程序抛出java.lang.Clascascastexception异常。

代码片段如下:

RedisServiceImpl.java:

@Override
public void saveliked2Redis(String likeUserId, String likePostId, String likeAnswerId) {
    String key = RedisKeyUtils.getLikedKey(likeUserId, likePostId, likeAnswerId);
    redisTemplate.opsForHash().put(RedisKeyUtils.MAP_KEY_USER_LIKED, key, Constant.REDIS_LIKE_CODE);
}

RedisLikeController.java:

//点赞
@RequiresAuthentication
@RequestMapping("/userLike")
public ResponseJson userLike(@RequestBody UserLike userLike) {
    redisService.saveliked2Redis(userLike.getLikeUserId(), userLike.getLikePostId(), userLike.getLikeAnswerId());
    return new ResponseJson(Constant.HTTP_CODE_OK, null, "点赞成功");
}

UserLike.java:

public class UserLike {
    private Integer id;///主键ID
    private String likeUserID;//喜欢人ID
    private String likePostID;///被点赞文章ID
    private String likeAnswerID;//被点赞回答ID
    private Integer status = 0;///表扬状态,默认不表扬0 0:未点赞 1:已点赞
    //省略了结构部分
}

错误信息显示异常发生在redistemplatetet上.opsForHash().put()方法中。原因是redisTemplate使用StringRedisSerializer进行序列化,而Constant.REDIS_LIKE_CODE是Integer类型。Stringredisserializer不能直接将Integer对象序列为字符串,导致类型转换异常。

Constanttant解决方案.REDIS_LIKE_CODE类型修改为String类型。这样,Stringredisserializer就可以正确地将值序列化并存储在redis中。 修改后,问题就可以解决了。

以上是如何调查Redis点赞功能中Integer类型转换异常?详情请关注图灵教育的其他相关文章!