会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 Redis 序列化值,多了双引号问题!

Redis 序列化值,多了双引号问题

时间:2025-11-05 03:55:45 来源:益强数据堂 作者:系统运维 阅读:534次

问题

有两个服务:A 服务和 B 服务,列化A 服务负责将数据写入 Redis 的值多 Hash 中,B 服务负责从 Redis 中读取这些数据。双引在实际运行中,号问B 服务读取到的列化数字类型字符串与 A 服务写入的值不一致:

图片

问题排查,最终发现通过hgetall命令返回字符串多加了有引号:

图片

这里怀疑可能是值多Redis配置中的序列化参数设置导致的

序列化与反序列化

Redis序列化和反序列化是将数据结构转换为二进制格式和将二进制数据转换为对应的数据结构的过程。

序列化的双引作用是将数据结构转换为二进制形式,以便于传输和存储。号问它可以将数据保存在文件、列化数据库或者网络上,值多并能够被其他程序使用。双引序列化还能够对数据进行压缩,号问并提供灵活的列化数据交换格式。

反序列化则是值多将二进制数据转化为对应的数据结构,服务器租用方便在Redis内部进行存储和查询等操作。双引这样可以实现对数据的读取和写入。

Redis支持多种数据结构的序列化和反序列化,包括string、hash、list、set、zset。

SpringBoot提供了多种Redis序列化方式,包括JDK序列化、JSON序列化、FastJSON序列化、Jackson序列化、Protobuf序列化等。其中JDK序列化是默认的序列化方式。

常见的序列化器

StringRedisSerializer:用于字符串的序列化和反序列化。适用于简单的字符串键值对。Jackson2JsonRedisSerializer:使用 Jackson 库进行 JSON 序列化和反序列化。适用于复杂对象的序列化。亿华云GenericJackson2JsonRedisSerializer:类似于 Jackson2JsonRedisSerializer,但可以处理泛型对象。OxmMarshaler:使用 Spring 的 Object-XML 映射功能进行序列化和反序列化。适用于 XML 数据。GenericToStringSerializer:将对象转换为字符串,适用于简单的对象。

A服务

使用了Jackson2JsonRedisSerializer

复制private RedisTemplate<String, Object> createRedisTemplate(JedisConnectionFactory connectionFactory) { // 序列化配置 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance , ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer); redisTemplate.setEnableDefaultSerializer(true); redisTemplate.afterPropertiesSet(); return redisTemplate; }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.

B服务

此服务为c++端,使用默认String,该端不做调整的话,修复A端为new StringRedisSerializer()方式

测试

图片

使用StringRedisSerializer来序列化key和value,这个序列化器会把Java字符串直接转换为Redis存储的字节序列,而不添加任何额外的格式化或引号。

使用Jackson2JsonRedisSerializer来序列化key和value,会把Java对象序列化为JSON格式的字符串。如果你序列化的是Java字符串,那么它就会被JSON格式化,并在最终存储在Redis中时带有双引号。

(责任编辑:应用开发)

推荐内容
  • 华为电脑桌面设置教程(通过多个桌面设置,让华为电脑更适合你的需求)
  • 苹果5s内屏损坏对用户体验的影响(探讨苹果5s内屏损坏对用户功能使用、观感以及维修成本的影响)
  • 云汇魔盒(了解云汇魔盒的特点、优势和风险,开启智能投资之旅)
  • 苹果电脑MLH12如何满足你的需求(一款强大性能的苹果笔记本电脑)
  • 世界最佳杀毒软件是什么?(揭秘最强大的杀毒软件,保护你的计算机安全!)
  • TP交换机在网络通信中的重要性及应用(探索TP交换机的工作原理和优势,为网络通信提供高效稳定的支持)