在springboot中整合redis并开启注解缓存后,因为要覆盖原本的jdk序列化器,我们重新写cachemanager配置的时候出现了java.util.LinkedHashMap cannot be cast to XXXXX。
可能是我们的value序列化器选择了new Jackson2JsonRedisSerializer<>(Object.class)
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer<>(Object.class)));
解决办法:
我们可以把new Jackson2JsonRedisSerializer<>(Object.class)改为new GenericJackson2JsonRedisSerializer()
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(10)) //设置过期时间
.disableCachingNullValues() //禁止缓存null对象
//* .computePrefixWith(cacheName -> "yourAppName".concat(":").concat(cacheName).concat(":"))*//* //此处定义了cache key的前缀,避免公司不同项目之间的key名称冲突
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) //定义了key和value的序列化协议,同时hash key和hash value也被定义
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));