
redisson 默认使用 kryo 实现高效、无侵入的序列化/反序列化,无需对象实现 `serializable`;java 原生序列化仅在显式配置时启用,可通过 `codec` 灵活替换为 json、avro 或自定义序列化器。
在基于 JCache(JSR-107)规范集成 Redisson 作为缓存提供者时,序列化机制是影响性能、兼容性与可维护性的关键环节。值得注意的是:Redisson 并不依赖 Java 原生序列化(java.io.Serializable)作为默认方案——这与许多开发者的直觉相反。根据 Redisson 官方文档,其默认序列化器是 Kryo,一个高性能、零依赖、支持循环引用和泛型的二进制序列化框架。
这意味着:
- ✅ 存储 java.time.LocalDate、List
、Lombok 生成的 POJO 等常见类型完全无需实现 Serializable; - ✅ 对象字段即使为 private 或含不可序列化成员(如 ThreadLocal),只要 Kryo 能反射访问并具备默认构造器,通常即可正常序列化;
- ❌ 若你观察到 Redis 中存储的是类似 aced0005... 的十六进制字节串,那很可能是误配了 JavaSerializationCodec —— 这并非默认行为。
你可以通过 Config 显式指定序列化器。例如,启用 JSON 序列化以提升跨语言可读性:
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
// 使用 JSON(需添加 redisson-json-codec 依赖)
config.setCodec(new JsonJacksonCodec());
RedissonClient redisson = Redisson.create(config);
CacheManager cacheManager = Caching.getCachingProvider()
.getCacheManager(new URI("redisson.yaml"), null);⚠️ 注意事项:Kryo 默认不支持 java.time.* 类型的序列化(如 LocalDateTime),需注册 JavaTimeModule(推荐使用 SerializationCodec 配合 KryoNamespace)或切换为 JsonJacksonCodec(自动支持 JSR-310);若必须兼容遗留系统或需审计缓存内容,JSON 是更优选择;若追求极致性能与低内存开销(尤其高频小对象),Kryo 仍是首选;切勿依赖 Java 原生序列化用于生产环境:它脆弱、慢、存在安全风险(反序列化漏洞),且要求所有嵌套类型严格实现 Serializable。
总结而言,Redisson 的序列化是高度可控且默认优化的。无需强制实现 Serializable,也不必接受“黑盒”行为——通过合理选用 Codec,你既能获得开箱即用的便捷性,也能按需定制语义清晰、安全可靠的序列化策略。










