【发布时间】:2018-08-07 13:18:25
【问题描述】:
我正在使用 spring-data-redis 在我的 Spring Boot 应用程序中缓存数据。我使用 Mongo 作为我的主要数据源,使用 Redis 作为缓存。当我第一次点击 API 时,它会从 Mongo 获取记录并将其保存在缓存中,并将 MyObject 正确返回给客户端。但是当我第二次点击 API 时,它会在缓存中找到记录,并在尝试将其反序列化回 MyObject 时,它 .总是遇到强制转换异常:
java.lang.ClassCastException: java.util.LinkedHashMap 不能被强制转换 到我的对象
这是我的 Redis 配置:
public class MyConfiguration {
@Bean
public CacheManager cacheManager(RedisTemplate<String, MyObject> redisTemplate) {
return new RedisCacheManager(redisTemplate);
}
@Bean
public RedisTemplate<String, MyObject> redisTemplate(RedisConnectionFactory connectionFactory, ObjectMapper objectMapper) {
StringRedisSerializer serializer = new StringRedisSerializer();
GenericJackson2JsonRedisSerializer hashValueSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);
RedisTemplate<String, MyObject> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(serializer);
redisTemplate.setValueSerializer(hashValueSerializer);
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
我研究了很长时间,但没有任何想法。请建议。 非常感谢。
【问题讨论】:
-
更新:这可以通过使用具有泛型的不同序列化程序并传入 ObjectMapper 来解决。使用 Jackson2JsonRedisSerializer
和 objectSerializer.setObjectMapper(objectMapper)。 -
没有解决原来的问题。
-
使用 Jackson2JsonRedisSerializer
可以解决您的具体情况,但它不是可扩展的解决方案,因为您不能向 redisTemplate 添加多个 Jackson2JsonRedisSerializer
标签: java redis spring-data