登录
首页 >  文章 >  java教程

Redis点赞数据存储:解决Integer类型转换异常

时间:2025-03-21 22:36:16 204浏览 收藏

本文针对Redis点赞数据存储中出现的java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String异常,提供详细的排查和解决方案。问题源于Redis模板的StringRedisSerializer序列化器与Integer类型点赞状态码Constant.REDIS_LIKE_CODE不匹配。文章分析了错误代码片段,并提出两种解决方案:一是将Constant.REDIS_LIKE_CODE改为String类型;二是将redisTemplate的value序列化器修改为GenericJackson2JsonRedisSerializer。选择哪种方案取决于项目整体架构和编码风格。 通过本文,开发者可以快速定位并解决Redis数据类型转换异常,提升系统稳定性。

Redis点赞数据存储:Integer类型值导致类型转换异常如何解决?

Redis数据存储类型转换异常排查与解决方案

在使用Redis存储点赞数据时,常常遇到类型转换异常java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String。此问题源于Redis模板的序列化机制与存储数据的类型不匹配。

问题描述:

后端代码将点赞用户ID (likeUserID)、被点赞文章ID (likePostID) 和被点赞回答ID (likeAnswerID) 存储到Redis。RedisServiceImpl.java 中的 saveLiked2Redis 方法接收三个 String 类型参数,并将其作为 key 的一部分,使用 redisTemplate.opsForHash().put 方法将点赞状态码 Constant.REDIS_LIKE_CODE 存储为 value。然而,Constant.REDIS_LIKE_CODE 是 Integer 类型,而 Redis 模板的默认序列化器 StringRedisSerializer 期望 value 为 String 类型,导致类型转换异常。

代码片段:

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:已点赞
    //省略了构造部分
}

错误信息追踪到 StringRedisSerializerserialize 方法,证实了 Constant.REDIS_LIKE_CODE 的 Integer 类型无法直接转换为 String 类型。

解决方案:

最直接的解决方法是将 Constant.REDIS_LIKE_CODE 定义为 String 类型,确保 Redis 存储的 value 与序列化器期望的类型一致,从而避免类型转换错误。 另一种方法是修改 redisTemplate 的 value 序列化器为可以处理 Integer 类型的序列化器,例如 GenericJackson2JsonRedisSerializer。 选择哪种方法取决于项目整体的设计和编码风格。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Redis点赞数据存储:解决Integer类型转换异常》文章吧,也可关注golang学习网公众号了解相关技术文章。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>