Technology

Dragonfly 真正值得看的是迁移边界,不是“Redis 平替”四个字

Dragonfly 适合被认真评估,但不适合被当作“Redis 免费性能外挂”直接替换。它的卖点很清楚:对 Redis 风格客户端友好、单实例吞吐高、资源效率更好、迁移起点低。对 Spring Boot 项目来说,这种吸引力也很直接,因为 Lettuce、Jedis、Spring Data Redis 或 Redisson 往往都能先连上,再逐步验证行为差异。

真正要判断的不是“能不能连上”,而是你的系统是否依赖 Redis 的边缘命令、持久化策略、集群语义、淘汰行为、故障恢复流程和尾延迟表现。缓存可以大胆试,核心状态要谨慎迁。

先从缓存层试,不要从账本层试

Spring Boot 里最适合先试 Dragonfly 的场景,是可重建缓存、热点读取、会话外的临时状态、限流计数、排行榜和短生命周期任务状态。这些数据通常有源系统兜底,出问题时可以回源重建,也更容易做灰度和回滚。

不建议第一步就迁移订单状态、支付幂等、强一致队列、任务确认链路或不可丢业务事件。即使协议兼容,也不代表运维模型完全等价。很多线上事故不是“连不上”,而是“某个边缘行为和原来不一样”。

接入 Spring Boot 的最小路径

大多数 Java 应用不需要新客户端。先在测试环境启动 Dragonfly,保持 Redis 协议端口,然后让 Spring Data Redis 指向新的 host 和 port。业务代码最好不要感知底层是 Redis 还是 Dragonfly,这样回滚时也更容易切回原服务。

如果用了 Lua 脚本、Pipeline、Pub/Sub、Streams、Bitmap、事务、缓存注解或冷门命令,就要逐项跑兼容性测试。迁移前的命令画像比“官方兼容”四个字更重要。最好把应用里真实出现过的命令、脚本和 key 结构先整理成清单,再决定哪些能试迁,哪些必须保留在 Redis 上。

压测要看尾延迟和恢复,不只看 QPS

官方和社区基准经常强调吞吐,但生产系统更怕尾延迟、快照时抖动、重启恢复、连接池耗尽和内存临界点。评估 Dragonfly 时,至少要测三组:常态读写、高峰写入、重启或复制期间的行为。再加一轮故障注入,看看客户端重试、超时和降级是否还稳定。

更现实的结论往往不是“全换”或“不换”,而是分层使用:把它先放到高吞吐、可回滚的缓存层,等命令覆盖、监控、恢复和回滚都通过,再考虑更深的迁移。