redis中是沒有Long型別的
阿新 • • 發佈:2021-12-08
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; }