redis中是没有Long类型的

 

redis中没有Long类型,存储进去后取出来会是Interger类型。需要自行转化,不可直接强转。否则将CCE。 本人在处理springboot的redisTemplate封装时发生了这个异常。解决方案如下

 

private <T> T getObject(String key, Class<T> clazz, boolean updateLive, long timeout, TimeUnit unit) {
    Assert.notNull(key, "查询key值不能为null");
    if (isExist(key)) {
        Object valueObj = redisTemplate.opsForValue().get(key);
        if (updateLive) {
            redisTemplate.expire(key, timeout, unit);
        }
        if (clazz.isInstance(valueObj)) {
            return (T) valueObj;
        } else if (clazz == Long.class && valueObj instanceof Integer) {
            Integer obj = (Integer) valueObj;
            return (T) Long.valueOf(obj.longValue());
        } else {
            logger.warn("object type is " + valueObj.getClass().getName() + ", which can not cast to "
                    + clazz.getName());
        }
    }
    return null;
}

 

posted @ 2021-12-08 14:40  牧之丨  阅读(218)  评论(0编辑  收藏  举报