如何修复Spring Boot集成Redis后的序列化性能瓶颈_改用Protobuf或Kryo序列化器

浅静小哥_4813

浅静小哥_4813

2026-06-05

728人浏览

原创

protobuf序列化需显式注册消息类、key必须用stringredisserializer、value才适用protobuf,且须注意线程安全与schema管理。

如何修复spring boot集成redis后的序列化性能瓶颈_改用protobuf或kryo序列化器

直接换 Protobuf 或 Kryo 能显著缓解序列化性能瓶颈,但不能“一换就灵”——关键在类型注册、线程安全和 RedisTemplate 配置粒度。盲目替换反而可能引发反序列化失败或内存泄漏。

Protobuf 序列化器必须显式注册消息类

Protobuf 不像 JSON 那样能靠反射自动识别类型,ProtobufCodec 或自定义 RedisSerializer 必须提前告知它要处理哪些 .proto 生成的 Java 类。没注册就存取,运行时抛 IllegalArgumentException: No message class registered for type。

  • Spring Data Redis 场景:需实现 RedisSerializer<t></t>,构造时传入具体 Message 子类(如 UserProto.User.class),不能只传 Object.class
  • Redisson 场景:用 new ProtobufCodec(UserProto.User.class) 初始化,多个类型需组合封装(如用 CompositeCodec)
  • 注意 build() 后的对象才是可序列化的实例;未调用 build() 的 Builder 直接塞进 Redis 会报 ClassCastException

Kryo5Codec 在多线程下需避免共享实例

Kryo 实例不是线程安全的,Spring 默认单例 Bean 会把同一个 Kryo 实例复用到所有请求线程中,高并发下出现 KryoException: Buffer overflow 或字段错乱。

Booltool
Booltool

Booltool是一款集合图片修复、抠图、增强和视频编辑能力的在线 AI 创作工具。

下载
  • Redisson 中推荐使用 Kryo5Codec(已内部做线程局部封装),不要自己 new Kryo 注册到 Config
  • 若自研 Kryo 序列化器,必须用 ThreadLocal<kryo></kryo> 包裹,或每次序列化都新建(代价高,不推荐)
  • 务必注册所有用到的集合类(ArrayList、HashMap)、日期类(LocalDateTime),否则反序列化时抛 Unable to find class

RedisTemplate 的 key 和 value 序列化器不能混用

常见错误是给 key 也配成 ProtobufSerializer,结果 redis-cli 连不上、KEYS user:* 查不到——因为 key 变成了二进制垃圾,Redis 命令行工具无法识别。

  • key 必须用 StringRedisSerializer(UTF-8 编码),这是硬性约定
  • hashKey(如 HSET 的 field)同理,也得是字符串,不能 protobuf
  • value 和 hashValue 才是性能瓶颈所在,才值得上 Protobuf/Kryo
  • 别忽略 setHashKeySerializer 和 setHashValueSerializer,漏配会导致 HGETALL 返回 null

Protobuf 比 Kryo 更适合跨服务场景,但代价是 Schema 管理

如果你的缓存数据会被 Go/Python 服务读取,或者未来要迁移到其他语言栈,Protobuf 是更稳的选择;Kryo 纯 Java 生态,升级 JDK 或 Kryo 版本时容易因序列化格式微变导致旧缓存失效。

  • Protobuf 要求所有变更通过 .proto 文件定义,新增字段必须设 optional 或保留编号,否则老客户端解析失败
  • Kryo 允许类字段增删,但需手动维护 Registration 表,且不保证向后兼容
  • Protobuf 编译后的类体积小、解析快,实测比 Kryo 小 15%~20%,但编译流程增加 CI 步骤(需集成 protobuf-maven-plugin)

真正卡住性能的往往不是序列化协议本身,而是没关掉 Jackson 的 enableDefaultTyping、没配对 hash 的序列化器、或让 Kryo 去序列化未注册的 Lambda 表达式——这些细节比选 Protobuf 还重要。

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

2391

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

437

25

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4329

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3835

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

6992

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

623

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6662

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习