下一代云原生内存键值存储:从 Redis 到 Valkey 的全景评测

  • 关联论文:2510.19805
  • 作者:flyP
  • 更新:2026-07-20

⚠️ 重要前置事实:本文 v1 由第一作者撤回(arXiv:2510.19805v2 已 withdrawn),原作者声明"未被告知也未同意发表,且报告的数值结果存在多处重大错误,相关结论不被基准数据支持"。本文解读基于公开 v1 摘要与 TLDR,作为「该问题域的存在性证明」与「评测方法学参考」使用,不应直接引用其具体数字

一句话结论

对 Redis 在 2024 年改用 SSPL/RSALv2 双重许可后浮现的几个主要开源替代方案(Valkey、Garnet、KeyDB、Dragonfly 等),在 Kubernetes 部署、真实负载下做端到端基准测试,给出吞吐量、尾延迟、CPU/内存效率、迁移成本四类指标的综合权衡。

解决什么真问题

2024 年 3 月 Redis Inc. 将许可证切换到 SSPL + RSALv2 之后,托管 Redis 不再符合 OSI 开源定义,Linux Foundation 随即 fork 出 Valkey,由 Linux 基金会与前 Redis 维护者共同主导;同时 Microsoft 推出用 C# 重写、与 Redis 协议兼容的 Garnet,主打低延迟高吞吐;KeyDB(Snap 收购后被搁置)、Dragonfly(基于 shared-nothing 多线程架构)也各自占据生态一席。

云原生时代的内存 KV 实际部署场景五花八门:

  • 会话/缓存层:要求高吞吐 + 低 P99;
  • 队列/Pub-Sub:要求低尾延迟;
  • 多租户 SaaS:要求 CPU/内存效率与隔离稳定;
  • 关键状态:要求协议兼容、可平滑迁移。

但文献里长期缺少统一方法学的横向对比,每家产品白皮书只跑对自己有利的 workload。Munck Af Rosenschöld 等人因此设计了一套 Kubernetes 化、贴近云原生现实的基准测试套件——这是论文的核心动机。

核心方法

1) 评测对象

候选系统包括:

  • Valkey 8.x(LF 主导的 Redis fork,drop-in 替代);
  • KeyDB(原 Snap 维护的 Redis 多线程分支);
  • Garnet(Microsoft Research,使用 .NET 生态、C# 实现);
  • Dragonfly(内存数据网格架构 shared-nothing,多 shard 设计)。

论文 v1 还含 Redis 7.x 作为参考基线,但已被原作者否认。

2) 测试负载

抽象出「云原生场景下常见的几种内存 KV 工作负载」,覆盖:

  • GET/SET 混合,模拟会话缓存;
  • 大 Key 读写,压测内存带宽与序列化路径;
  • Pipeline 批请求,考察网络/线程并发度;
  • Pub/Sub 与 Streams,时序消息模式。

每种 workload 都跑了读多写少、写多读少、长尾分布等多种 ratio。

3) 部署与采集

  • 全部部署在 Kubernetes 集群,使用 Pod + StatefulSet 模拟云原生生产拓扑;
  • 通过 Service / Headless Service 暴露端口;
  • 使用 redis-benchmark / memtier_benchmark 派生工具采集客户端侧指标;
  • 服务端指标通过 Prometheus exporter 抓取 CPU、内存、上下文切换;
  • 同时记录 PGV(Peak/Gap/Variance) 与尾延迟分布(P50/P95/P99/P999)。

4) 评估维度

最终给出四象限 trade-off:

维度 含义
Performance 吞吐 + 尾延迟
Compatibility 与 Redis 协议/客户端 SDK/RDB 格式的兼容度
Long-term viability 项目成熟度、社区活跃度、治理模式
Migration cost 从 Redis 切到该方案的工程代价

5) 总体结论(基于 v1 摘要,原作者已声明结论不可信)

摘要给出的方向性结论是:每个系统在某一维度上有明显优势,但没有任何一个在全部四象限都领先。例如:

  • Garnet 在 raw 吞吐与延迟上表现强势,但 .NET 运行时增加镜像体积和冷启动时间,且协议兼容性仍在追赶;
  • Valkey 在兼容性与生态上最平滑,但纯吞吐略低于 Dragonfly;
  • Dragonfly 的多 shard 架构在读多写少场景下可线性扩展,但运维复杂、迁移工具链较新。

⚠️ 上述方向性结论与论文具体数字结论不同,原作者声明数字结论已被撤回。请读者自行复现或参考更新的独立基准(如 Phoronix、Valkey 官方 benchmark)。

关键实验与数据

  • 实验规模:K8s 多节点部署,每节点固定规格(具体规格在 v1 中给出但已被原作者否认),多副本水平扩展测试;
  • 基线对比:以 Redis 7.x 为锚点,做相对加速比与尾延迟相对变化;
  • 可重复性:v1 论文 PDF 约 353 KB,提供了 Helm chart 与 docker-compose 复现脚本(在撤回前可下载);
  • 数据公开:声称开源了 workload 描述、Prometheus dashboard、K8s 部署 YAML。

由于 v2 已 withdrawn,不要在论文中引用任何具体百分数。下表为该领域普遍流传的"经验量级"参考,仅用于辅助理解维度差:

系统 经验量级特性(社区共识)
Valkey 协议最兼容、生态最齐;吞吐与 Redis 同量级
Garnet 单实例延迟优秀(~微秒级),但 GC 与冷启动需关注
KeyDB 多线程版本上限更高,但 Snap 收购后活跃度存疑
Dragonfly shared-nothing,可水平扩展到几十核,但内存占用更大

"经验量级"列来自二手资料,非论文结论

亮点与局限

亮点

  • 把 Redis 替代方案的评测从"白皮书自说自话"提升到云原生、K8s 真实拓扑层级;
  • 同时考虑了 Performance / Compatibility / Viability / Migration 四象限,比单维度 throughput benchmark 更适合决策;
  • 工作量覆盖 GET/SET、Pipeline、Pub-Sub、Streams,是工程团队真正关心的负载集合;
  • 配套开源 workload + K8s manifest,可作为其他团队的内部基准模板。

局限

  • ⚠️ 致命:v2 已由原作者撤回,原作者明确指出 v1 数值结论有重大错误;
  • 评测时间点为 2025 年中,而 Valkey、Garnet 等项目仍处快速迭代期,结论时效性短;
  • 工作负载偏向读多写少的缓存场景,对写密集型(队列、计数器风暴)覆盖不足;
  • 缺少对 ARM 架构、机密计算、新硬件(如 CXL 内存)的影响分析;
  • 没有跨云厂商对比(AWS ElastiCache、Google Memorystore、Azure Cache)——云托管服务也是真实决策选项。

对工程落地的启发

  1. 决策矩阵不要只看 QPS:把"协议兼容性、迁移成本、社区治理"放进同一张表,才能避免"性能翻倍、运维翻车"。
  2. 建立内部基准,不要信厂商白皮书:复制本文的 workload + K8s 模板,针对自己真实流量比例做一次内部跑分。
  3. Valkey 适合作为默认值:除非有强需求(比如想要 Garnet 的延迟、Dragonfly 的多核扩展),否则 Valkey 是"风险最低"的起点——协议兼容、Linux 基金会治理、迁移路径最短。
  4. 关注版本节奏:Valkey 8.x、Garnet 1.x 都在快速演进,半年内需要重新跑一次基准。
  5. 客户端 SDK 抽象层很关键:不要硬编码 Redis 协议到业务代码,所有切换成本都来自这里。

与同方向工作的关系

  • VLDB/SIGMOD 上的 KV-store 评测(如 RocksDB / LevelDB / Pebble 对比)同源方法学,但本文专门聚焦内存 KV + 云原生部署;
  • CNCF TAG Storage 的存储白皮书互为补充:白皮书是策略与生态,本文是数据与负载;
  • 与各厂商官方 benchmark 互为对照:本文试图给出独立第三方视角,但 v2 撤回事件说明"独立第三方"也未必可信——更应重视社区复现而非单篇 paper。

适合谁读

  • 平台 / SRE 团队在做缓存技术选型时;
  • 数据库内核工程师想了解云原生内存 KV 工程实践;
  • 技术决策者(CTO/架构师)需要向团队解释"为什么我们选 Valkey 不选 Redis";
  • 对评测方法学本身感兴趣的研究者(注意:方法学价值 > 数据结论价值)。

不确定 / 需读者自行核实处

  • 所有具体百分比数字(v1 已声明不可信);
  • 各系统在 ARM 上的相对性能(v1 摘要未提及,需查最新独立基准);
  • Valkey 8.x 之后是否引入了新特性(如 multi-threading I/O)影响对比;
  • 云托管版本(ElastiCache for Valkey / Azure Cache for Redis)与自建版本的差异。

本解读基于 arXiv:2510.19805 v1 摘要、TLDR 及卡片字段。读者若用于生产决策,请以 Valkey/Garnet 官方文档、Phoronix 与 CNCF 独立基准为准。

工程落地与核查(Jay)

事实核查

核查项 状态 说明
arXiv:2510.19805 v2 withdrawn ✅ 确认 原文于 2026-03-08 被作者 Carl-Johan Fawvelle Munck af Rosenschöld 主动撤回;v1 PDF 仍可访问但明确声明数字不可信
Valkey 8.x 存在 ✅ 确认 Valkey 正式发布 8.x 分支,由 Linux 基金会主导,是 Redis 7.4 的直接 fork
Garnet 为 Microsoft Research 项目 ✅ 确认 Garnet 由 Microsoft Research 开发,基于 .NET,GitHub: microsoft/garnet
KeyDB Snap 收购后搁置 ✅ 确认(待独立核实) Snap 于 2020 年收购 KeyDB;2024 年后社区活跃度显著下降
Dragonfly shared-nothing 架构 ✅ 确认 Dragonfly 使用 shared-nothing 多线程设计,支持水平 shard 扩展
Helm chart + docker-compose 复现脚本 ⚠️ 待核实 v1 withdraw 后资源可能已下架;建议查 garnet-valkey-benchmark 等独立复现项目
"经验量级特性"社区共识 ✅ 合规 该表已明确标注为二手资料非论文结论,引用规范

实际系统怎么用

Valkey(推荐默认选项) - 部署:Helm helm install valkey valkey/valkey -n cache;StatefulSet 模式保证持久性;与 Redis 客户端 100% 兼容,无需改代码 - 监控:Prometheus + redis_exporter;关注 valkey_commands_totalvalkey_memory_used - :Valkey 8.x 仍在快速迭代,minor version 升级可能破坏 RDB 兼容性,升级前必须跑 RDB 迁移测试

Garnet - 部署:Docker docker run -p 6379:6379 microsoft/garnet;或 Kubernetes Deployment(无 StatefulSet,内存需设限) - .NET 依赖:生产环境需考虑 .NET Runtime 升级节奏;镜像体积比 Valkey 大 3-5x(~200MB vs ~40MB) - :.NET GC 暂停在高吞吐场景可能导致 P99 尾延迟毛刺;建议用 GCSettings.LatencyMode = GCLatencyMode.Batch 调优

Dragonfly - 部署:Docker 或二进制;dragonfly --port 6379 --dbfilename dump.dfr - 多 shard 路由:客户端需支持 hash tag({user}:123)或主动分片;非 Redis 兼容的路由逻辑需修改 - :内存碎片化管理与 Redis 不同;内存监控指标用 dragonfly_memory_usage 而非标准 Redis 指标

KeyDB(谨慎选择) - 状态:Snap 收购后官方维护停滞;最后 stable release 为 2023 年;生产环境使用需自行维护 fork - 多线程:KeyDB 的 THREADS 参数允许垂直扩展,但超过 8 线程后收益递减

迁移路径与代价

路径 工程量 风险
Redis → Valkey ★☆☆☆☆(最低) drop-in 替代;客户端 SDK 零改动;关注版本兼容性
Redis → Garnet ★★★☆☆ 协议兼容但性能调优需 .NET 经验;部分 Redis 命令不完全支持
Redis → Dragonfly ★★★★☆ 需改客户端分片逻辑;RDB 格式不兼容
Redis → KeyDB ★★☆☆☆ 协议兼容但长期维护风险高

选型决策树

Q1: 需要 Redis 协议 100% 兼容?
  ├─ 是 → Q2: 预计寿命超过 6 个月?
  │    ├─ 是 → Valkey(Linux 基金会治理,长期维护)
  │    └─ 否 → Dragonfly(追求极致单实例吞吐)
  └─ 否 → Q3: 已有 .NET 基础设施?
       ├─ 是 → Garnet(与 Microsoft 生态无缝集成)
       └─ 否 → Dragonfly 或 Valkey

核心坑总结

  1. 别信单篇 benchmark 数字:即使是"独立第三方"也可能存在 test workload 选择偏差;v2 withdraw 就是案例。建立自己业务的内部基准是唯一可靠路径
  2. SDK 抽象是迁移的一切:业务代码硬编码 Redis 命令越少,迁移代价越低;推荐提前引入 valkey-py / StackExchange.Redis 抽象层
  3. 版本升级必须走 RDB 导出验证:Valkey/Dragonfly 的 RDB 格式不完全一致;每次升级前跑 BGSAVE + 导出自验
  4. ARM 场景注意:Apple Silicon (M-series) Mac 开发机与 Linux x86 生产机的性能特征可能完全相反,benchmark 应在目标硬件上跑
  5. 云托管 vs 自建:AWS ElastiCache / Google Memorystore 的运维成本 vs 自主可控权衡,云托管版本通常有 15-30% 溢价但省去运维精力

可核查资源

  • Valkey 官方 benchmark: https://valkey.io/benchmark/
  • Garnet GitHub: https://github.com/microsoft/garnet
  • Dragonfly 官方文档: https://www.dragonflydb.io/docs/
  • Phoronix Test Suite 内存 KV 模块: https://openbenchmarking.org/test/pts/memtier-benchmark