
Redis点赞数据存储异常排查与解决方案
在使用Redis存储点赞数据时,常常会遇到类型转换异常:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String。此异常通常发生在尝试将Integer类型的点赞状态代码存储到使用StringRedisSerializer序列化的Redis Hash结构中。
问题根源在于StringRedisSerializer仅能处理字符串类型数据。当程序试图将Integer类型值存储到使用该序列化器的Redis中时,就会发生类型转换错误。
问题代码示例:
以下代码片段展示了RedisServiceImpl.java中的saveLiked2Redis方法,该方法尝试将constant.REDIS_LIKE_CODE (Integer类型) 作为Redis Hash的value进行存储。
RedisServiceImpl.java:
@Overridepublic 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);}
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:未点赞,1:已点赞 // ... 省略构造方法 ...}
由于constant.REDIS_LIKE_CODE为Integer类型,而StringRedisSerializer要求value为String类型,因此导致类型不匹配。
解决方案:
为了解决此问题,最直接有效的方法是将constant.REDIS_LIKE_CODE的值定义为字符串常量。例如,将0改为”0″,将1改为”1″。 这避免了类型转换,确保Redis能够正确存储点赞状态信息,并且无需修改StringRedisSerializer,保持代码简洁性。
修改后的RedisServiceImpl.java (假设constant.REDIS_LIKE_CODE已修改为String类型):
@Overridepublic 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);}
通过这种简单的修改,即可有效解决ClassCastException异常,确保Redis点赞数据的正确存储。
以上就是Redis点赞数据存储异常:Integer类型值如何正确存入StringRedisSerializer?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/168602.html
微信扫一扫
支付宝扫一扫