在SpringBoot中,最近使用RedisTemplate来对redis进行操作,但是我们会发现,当我们修改了RedisTemplate的序列化方式之后,在存取Long类型数据时,会发生一些问题。
问题:
存入Long类型对象,在代码中使用Long类型接收,结果报类型转换错误。java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
示例代码:
@Test
public void redisSerializerLong(){
try {
Long longValue = 123L;
redisLongCache.set("cacheLongValue",longValue);
Object cacheValue = redisLongCache.get("cacheLongValue");
Long a = (Long) cacheValue;
}catch (ClassCastException e){
e.printStackTrace();
}
}
会报类型转换错误java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long。
问题排查:
为什么类型会变为Integer呢?跟我一起追踪源码,便会发现问题。
1. 在代码的最外层获取redis中key对应的value值
re

本文分析了在SpringBoot中使用RedisTemplate时,修改序列化方式后Long类型数据存取出现ClassCastException的问题,通过追踪源码发现原因在于默认反序列化为Object导致类型丢失。文章提供了使用Number类的intValue()和longValue()方法解决该问题的方法。
最低0.47元/天 解锁文章
527





