当前位置: 首页 > 图灵资讯 > 技术篇> Redis点赞数据存储异常:Integer类型值如何正确存入StringRedisSerializer?

Redis点赞数据存储异常:Integer类型值如何正确存入StringRedisSerializer?

来源:图灵教育
时间:2025-03-14 16:08:38

redis点赞数据存储异常:integer类型值如何正确存入stringredisserializer?

Redis点赞数据存储异常调查和解决方案

在使用Redis存储点赞数据时,经常会遇到类型转换异常:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String。这种异常通常发生在试图将integer类型的拇指状态代码存储到使用Stringredisserializer序列化的redis中 在Hash结构中。

问题的根源在于Stringredisserializer只能处理字符串类型数据。当程序试图将integer类型值存储在使用该序列化器的redis中时,类型转换错误就会发生。

问题代码示例:

以下代码片段显示Redisserviceimpl.saveLiked2Redis方法在java中,该方法试图使constant.REDIS_LIKE_CODE (Integer类型) 作为Redis 存储Hashvalue。

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);
}

UserLike.java:

public class UserLike {
    private Integer id; ///主键ID
    private String likeUserID; //喜欢人的身份证
    private String likePostID; ///被点赞文章ID
    private String likeAnswerID; //被点赞回答ID
    private Integer status = 0; //喜欢状态,0:未点赞,1:已点赞
    // ... 省略结构方法 ...
}

因为constanttantttantttanttan.REDIS_LIKE_CODE是Integer类型,而Stringredisserializer要求value是String类型,导致类型不匹配。

解决方案:

要解决这个问题,最直接、最有效的方法就是把constant.REDIS_LIKE_CODE值定义为字符串常量。例如,将0改为“0”,将1改为“1”。 这避免了类型转换,保证Redis能够正确存储拇指状态信息,不需要修改StringRedisSerializer,保持代码简洁。

Redisserviceimpl修改后.java (假设constant.REDIS_LIKE_CODE已修改为String类型。:

@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);
}

通过这种简单的修改,可以有效解决Clascascastexception异常,保证Redis点赞数据的正确存储。

以上是Redis点赞数据存储异常:如何正确存储StringRedisSerializerinteger类型值?详情请关注图灵教育的其他相关文章!