Redis序列化转换类型报错如何解决

编辑: admin 分类: mysql 发布时间: 2023-06-10 来源:互联网

Cannot convert value of type 'org.springframework.data.redis.core.convert.MappingRedisConverter' to required type 'org.springframework.data.redis.core.mapping.RedisMappingContext': no matching editors or conversion strategy found

在setValue的序列化方式的时候报错,原来是用的RedisSerializer.json()方法,但是报错,

template.setConnectionFactory(factory);
        // key序列化方式
        template.setKeySerializer(RedisSerializer.string());
        // value序列化方式
        template.setValueSerializer(RedisSerializer.json());
        // hash key的序列化方式
        template.setHashKeySerializer(RedisSerializer.string());
        // hash value的序列化方式
        template.setHashValueSerializer(RedisSerializer.json());
登录后复制

改成如下即可解决:

template.setConnectionFactory(factory);
        // key序列化方式
        template.setKeySerializer(RedisSerializer.string());
        // value序列化方式
        template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
        // hash key的序列化方式
        template.setHashKeySerializer(RedisSerializer.string());
        // hash value的序列化方式
        template.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
登录后复制

在Redis中,有多种序列化实现可供选择。其中,Jackson2JsonRedisSerializer和RedisSerializer.json()都是Redis中的序列化实现。它们的区别如下:

Jackson2JsonRedisSerializer使用Jackson库将Java对象序列化为JSON格式的字符串,并将其存储到Redis中。它也能够将读取自Redis的JSON字符串转化为Java对象。因此,使用Jackson2JsonRedisSerializer可以方便地处理JSON格式的数据,并且对于复杂的Java对象可以进行较好的序列化和反序列化。要完全控制序列化过程,需要进行一定的配置,因为在序列化时可能会忽略Java对象中的一些字段。

RedisSerializer.json()使用Redis的内置JSON序列化器,将Java对象序列化为JSON格式的字符串,并将其存储到Redis中。它还可用于将从Redis中取出的JSON字符串反序列化为Java对象。与Jackson2JsonRedisSerializer相比,RedisSerializer.json()在序列化过程中会将所有Java对象中的字段都序列化到Redis中,但在处理复杂Java对象时,可能需要进行一些额外的配置。

因此,选择哪种序列化方式取决于使用场景和具体需求。如果需要处理复杂的Java对象,并且对序列化和反序列化的精细控制比较关键,那么Jackson2JsonRedisSerializer是一个更好的选择。而如果处理的数据较为简单,或者只需要简单地将Java对象转换为JSON格式的字符串进行存储,那么RedisSerializer.json()可能更适合。

【文章原创作者:国外高防服务器 http://www.558idc.com/shsgf.html转载请说明出处】