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