Redis點贊功能中Integer類型轉換異常如何排查?

Redis點贊功能中Integer類型轉換異常如何排查?

排查redis點贊功能中Integer類型轉換異常

在使用redis存儲點贊數據時,經常會遇到類型轉換異常。本文通過一個實際案例,分析并解決Java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String異常。

該問題出現在一個點贊功能中。后端接收點贊用戶信息(點贊用戶ID、被點贊文章ID和被點贊回答ID),并將其存儲到Redis。傳入數據類型字符串,但程序卻拋出java.lang.ClassCastException異常。

代碼片段如下:

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:已點贊     //省略了構造部分 }

錯誤信息顯示異常發生在redisTemplate.opsForHash().put()方法中。原因是redisTemplate使用了StringRedisSerializer進行序列化,而Constant.REDIS_LIKE_CODE卻是Integer類型。StringRedisSerializer無法直接將Integer對象序列化為字符串,導致類型轉換異常。

解決方法是將Constant.REDIS_LIKE_CODE的類型修改為string類型。這樣StringRedisSerializer就能正確序列化該值并存儲到Redis中。 修改后,問題即可解決。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享