下一代云原生内存键值存储:从 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)——云托管服务也是真实决策选项。
对工程落地的启发
- 决策矩阵不要只看 QPS:把"协议兼容性、迁移成本、社区治理"放进同一张表,才能避免"性能翻倍、运维翻车"。
- 建立内部基准,不要信厂商白皮书:复制本文的 workload + K8s 模板,针对自己真实流量比例做一次内部跑分。
- Valkey 适合作为默认值:除非有强需求(比如想要 Garnet 的延迟、Dragonfly 的多核扩展),否则 Valkey 是"风险最低"的起点——协议兼容、Linux 基金会治理、迁移路径最短。
- 关注版本节奏:Valkey 8.x、Garnet 1.x 都在快速演进,半年内需要重新跑一次基准。
- 客户端 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_total 和 valkey_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
核心坑总结
- 别信单篇 benchmark 数字:即使是"独立第三方"也可能存在 test workload 选择偏差;v2 withdraw 就是案例。建立自己业务的内部基准是唯一可靠路径
- SDK 抽象是迁移的一切:业务代码硬编码 Redis 命令越少,迁移代价越低;推荐提前引入
valkey-py/StackExchange.Redis抽象层 - 版本升级必须走 RDB 导出验证:Valkey/Dragonfly 的 RDB 格式不完全一致;每次升级前跑
BGSAVE+ 导出自验 - ARM 场景注意:Apple Silicon (M-series) Mac 开发机与 Linux x86 生产机的性能特征可能完全相反,benchmark 应在目标硬件上跑
- 云托管 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