如截图所示,如果要缓存的数据是String类型,能正常放进去
但是如果是个非String类型,比方说是个List类型,它就会报错,java.util.List cannot be cast to java.lang.String
debug了一下是在org.springframework.cache.interceptor.AbstractCacheInvoker里的doPut方法里报的RunTimeException,如图
这个类型转换不成功,是哪里配置不对么?实在找不出来具体的报错地方是哪里,有人知道的请帮忙看看。。。。
你的key和value都要序列化的 像stringSerializer和 valueSerializer之类的
怎么操作,我这边应该不是key的问题,就是value如果不是String就不行。
@那啥快看:
public void save(final String key, final Serializable object, final long expireTime) {
// TODO Auto-generated method stub
try {
redisTemplate.execute(new RedisCallback<Serializable>() {
@Override
public Serializable doInRedis(RedisConnection connection) throws DataAccessException {
try {
@SuppressWarnings("unchecked")
RedisSerializer<Serializable> valueSerializer = (RedisSerializer<Serializable>) redisTemplate.getValueSerializer();
connection.set(redisTemplate.getStringSerializer().serialize(key), valueSerializer.serialize(object));
connection.expire(redisTemplate.getStringSerializer().serialize(key), expireTime);
} catch (Exception e) {
throw e;
}
return null;
}
});
} catch (Exception e) {
throw e;
}
}
这是我项目的redis save方法,object是实现了Serializable的一个自定义的DTO,你参考一下吧
@让我发会呆: 谢谢,你的代码给了我提示,其实我网上之前我找的帖子人家已经写了怎么操作了,只怪我自己看的不仔细
先json序列化了再放进去.
转化为json字符串是可以放进去,但是项目中大多数情况都是要缓存实体bean的,而且我看网上别人可以缓存,所以我要知道问题的答案
@那啥快看: 也是序列化的.不过是序列化的方式不一样.
@吴瑞祥: 你说的是对的,已经解决了
问题已经解决,还是我上面截图的RedisCacheConfig那个类,里面的redisTemplate这里就不在applicationContext.xml里配置了,在这个类里加上RedisSerializer的json序列化代码