Redis點贊數(shù)據(jù)存儲:Integer類型轉(zhuǎn)換異常如何解決?

Redis點贊數(shù)據(jù)存儲:Integer類型轉(zhuǎn)換異常如何解決?

redis點贊數(shù)據(jù)存儲:Java Integer類型轉(zhuǎn)換異常排查及解決方案

在使用redis存儲點贊數(shù)據(jù)時,經(jīng)常會遇到java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String異常。此異常通常源于redis模板的序列化機制與傳入數(shù)據(jù)類型不匹配。

問題場景:RedisServiceImpl.java中的saveLiked2Redis方法嘗試將Integer類型的Constant.REDIS_LIKE_CODE存儲到Redis的Hash結(jié)構(gòu)中,而Redis模板默認使用StringRedisSerializer進行值序列化,導致類型沖突。

代碼分析:RedisLikeController.java中的userLike方法接收前端點贊信息(封裝在UserLike對象中),UserLike對象的likeUserID、likePostID、likeAnswerID字段類型為String,與saveLiked2Redis方法的參數(shù)類型一致。然而,Constant.REDIS_LIKE_CODE (Integer類型)作為Hash值傳入,與StringRedisSerializer期望的string類型不符。

解決方案:關鍵在于使Constant.REDIS_LIKE_CODE的數(shù)據(jù)類型與StringRedisSerializer匹配。 最直接有效的方案是將Constant.REDIS_LIKE_CODE的值定義為String類型。 這避免了類型轉(zhuǎn)換錯誤,確保數(shù)據(jù)與序列化器兼容。 其他方案,例如修改Redis模板的序列化器以支持Integer類型,雖然可行,但相對復雜,且修改Constant.REDIS_LIKE_CODE更為簡潔高效。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊8 分享