Spring Reactive Redis缓存存储Boolean类型报序列化异常如何解决?
异常触发原因
- 从异常栈的
DefaultReactiveHashOperations类可以判定,你当前使用的是Redis哈希结构存取数据,而你现有配置仅对普通Key、普通Value的序列化规则做了声明,没有覆盖哈希结构的HashValue序列化场景。未配置HashValue序列化器时,框架无法识别Boolean类型的序列化规则,因此抛出该异常。 - 你选用的
GenericJackson2JsonRedisSerializer本身支持Boolean类型的序列化,并非序列化器本身不兼容该类型。
修复方案
在构建RedisSerializationContext时,补充哈希结构的序列化配置即可,修复后的完整配置如下:
ReactiveRedisTemplate<String, Object> reactiveRedisTemplateGeneric(ReactiveRedisConnectionFactory reactiveRedisConnectionFactory) { GenericJackson2JsonRedisSerializer valueSerializer = new GenericJackson2JsonRedisSerializer(); StringRedisSerializer stringSerializer = new StringRedisSerializer(); RedisSerializationContext.RedisSerializationContextBuilder<String, Object> builder = RedisSerializationContext.newSerializationContext(stringSerializer); // 原有普通value序列化配置 builder.value(valueSerializer); // 新增哈希结构key、value序列化配置 builder.hashKey(stringSerializer); builder.hashValue(valueSerializer); RedisSerializationContext<String, Object> context = builder.build(); return new ReactiveRedisTemplate<>(reactiveRedisConnectionFactory, context); }
如果后续使用列表、集合等其他Redis数据结构时出现同类序列化报错,可按需补充对应结构的序列化配置(例如builder.listSerializer(valueSerializer)、builder.setSerializer(valueSerializer)),确保所有使用到的数据结构都有匹配的序列化规则。
内容的提问来源于stack exchange,提问作者Anmol Garg
相关产品推荐
相关产品推荐

