性能 · 架构 · 成本
Lavik vs Valkey
保留熟悉的协议,改变容量成本。
Lavik 与 Valkey 9.1.0 对比:NVMe SSD 上更高的实测 GET/SET 峰值 QPS、SET 延迟差异,以及 DRAM 与 SSD 的容量成本。
Lavik 项目团队 · 资料核对: 2026-10-13 · Valkey 9.1.0 · DRAM
2026 年 9 月 18 日 · beta.1
让真实测量说明性能
10M 键 × 1 KiB 值;AMD EPYC 9V74,约 126 GiB RAM,六块 NVMe,16 个逻辑 CPU 亲和性,pipeline=1。每点测量一次,窗口 30 秒。对照数据来自相同主机较早的扫描;beta.1 SPDK 点为新测。每种操作分别选择各系统最高 QPS 点,连接数可能不同。 方法与完整报告 ↗
| 操作 | 系统 | QPS | p99 (ms) | p99.9 (ms) | 连接数 |
|---|---|---|---|---|---|
| GET | Lavik 0.1.0-beta.1 SPDK | 1,012,180 | 3.599 | 5.631 | 640 |
| GET | Valkey 9.1.0 · DRAM | 965,697 | 4.543 | 8.159 | 1280 |
| SET | Lavik 0.1.0-beta.1 SPDK | 930,465 | 4.799 | 8.095 | 1280 |
| SET | Valkey 9.1.0 · DRAM | 802,519 | 4.383 | 8.895 | 1280 |
读懂这个结果
本次扫描中 Lavik 的 GET 与 SET 峰值 QPS 更高。但 Valkey 所选 SET 峰值点的 p99 更低:4.383 ms,而 Lavik 为 4.799 ms。报告覆盖 Valkey 的 1/2/4/8/16 个 I/O 线程配置;SET 最佳结果使用 8 个线程。Valkey 持久化被关闭。
这是 Lavik 项目发布的基准,尚非第三方复测。单机短窗口结果不能证明相同崩溃持久性、长期稳定状态、集群容量或应用 SLA。使用下方成本模型前,请对照你的负载、数据分布与延迟预算。
查看完整连接数与线程扫描
| 系统 | 操作 | 线程* | 连接 | QPS | p99 (ms) |
|---|---|---|---|---|---|
| Lavik | GET | 16 | 80 | 390,494 | 0.335 |
| Lavik | GET | 16 | 160 | 609,161 | 0.487 |
| Lavik | GET | 16 | 320 | 803,016 | 0.959 |
| Lavik | GET | 16 | 640 | 1,012,180 | 3.599 |
| Lavik | GET | 16 | 1280 | 940,713 | 9.791 |
| Lavik | SET | 16 | 80 | 473,384 | 0.591 |
| Lavik | SET | 16 | 160 | 633,849 | 1.071 |
| Lavik | SET | 16 | 320 | 759,488 | 1.671 |
| Lavik | SET | 16 | 640 | 876,266 | 3.567 |
| Lavik | SET | 16 | 1280 | 930,465 | 4.799 |
| Valkey | GET | 1 | 80 | 145,676 | 0.895 |
| Valkey | GET | 1 | 160 | 153,278 | 1.895 |
| Valkey | GET | 1 | 320 | 155,408 | 3.935 |
| Valkey | GET | 1 | 640 | 153,631 | 8.095 |
| Valkey | GET | 1 | 1280 | 140,694 | 17.151 |
| Valkey | SET | 1 | 80 | 143,506 | 0.871 |
| Valkey | SET | 1 | 160 | 145,804 | 1.967 |
| Valkey | SET | 1 | 320 | 145,608 | 4.159 |
| Valkey | SET | 1 | 640 | 141,952 | 8.767 |
| Valkey | SET | 1 | 1280 | 130,767 | 18.303 |
| Valkey | GET | 2 | 80 | 162,097 | 0.663 |
| Valkey | GET | 2 | 160 | 152,944 | 1.223 |
| Valkey | GET | 2 | 320 | 157,562 | 2.207 |
| Valkey | GET | 2 | 640 | 158,224 | 4.607 |
| Valkey | GET | 2 | 1280 | 149,710 | 11.711 |
| Valkey | SET | 2 | 80 | 144,667 | 0.743 |
| Valkey | SET | 2 | 160 | 151,504 | 1.247 |
| Valkey | SET | 2 | 320 | 146,800 | 2.351 |
| Valkey | SET | 2 | 640 | 148,389 | 4.927 |
| Valkey | SET | 2 | 1280 | 134,252 | 12.415 |
| Valkey | GET | 4 | 80 | 408,344 | 0.327 |
| Valkey | GET | 4 | 160 | 424,952 | 0.551 |
| Valkey | GET | 4 | 320 | 440,409 | 0.951 |
| Valkey | GET | 4 | 640 | 446,155 | 1.823 |
| Valkey | GET | 4 | 1280 | 442,891 | 3.695 |
| Valkey | SET | 4 | 80 | 381,336 | 0.359 |
| Valkey | SET | 4 | 160 | 396,496 | 0.575 |
| Valkey | SET | 4 | 320 | 405,794 | 1.031 |
| Valkey | SET | 4 | 640 | 409,712 | 1.871 |
| Valkey | SET | 4 | 1280 | 409,846 | 4.447 |
| Valkey | GET | 8 | 80 | 542,966 | 0.287 |
| Valkey | GET | 8 | 160 | 667,212 | 0.551 |
| Valkey | GET | 8 | 320 | 789,831 | 1.159 |
| Valkey | GET | 8 | 640 | 831,080 | 3.503 |
| Valkey | GET | 8 | 1280 | 857,049 | 4.607 |
| Valkey | SET | 8 | 80 | 526,528 | 0.287 |
| Valkey | SET | 8 | 160 | 655,291 | 0.519 |
| Valkey | SET | 8 | 320 | 725,465 | 1.199 |
| Valkey | SET | 8 | 640 | 783,711 | 3.519 |
| Valkey | SET | 8 | 1280 | 802,519 | 4.383 |
| Valkey | GET | 16 | 80 | 544,238 | 0.279 |
| Valkey | GET | 16 | 160 | 692,905 | 0.519 |
| Valkey | GET | 16 | 320 | 826,689 | 1.463 |
| Valkey | GET | 16 | 640 | 897,768 | 3.583 |
| Valkey | GET | 16 | 1280 | 965,697 | 4.543 |
| Valkey | SET | 16 | 80 | 510,893 | 0.295 |
| Valkey | SET | 16 | 160 | 607,620 | 0.527 |
| Valkey | SET | 16 | 320 | 686,303 | 1.015 |
| Valkey | SET | 16 | 640 | 703,116 | 3.423 |
| Valkey | SET | 16 | 1280 | 741,469 | 4.127 |
*线程角色不同:Lavik 工作线程、Redis/Valkey I/O 线程、Dragonfly proactor、Garnet 最小线程池线程。 CSV ↗
存储设计如何影响你的应用
测试中的 Valkey 将数据集保留在 DRAM。Lavik 使用内存键索引与 SSD 值存储,通过 RESP 接受 Redis/Valkey 兼容命令。协议一致可复用客户端投入,但不代表所有命令与选项的行为完全相同。
对于长期会话、缓存和机器生成的特征数据,关键在于有效容量是否必须按 DRAM 价格扩展。Lavik 以 NVMe SSD 承载值容量,并通过异步执行追求高吞吐量,无需把全部值常驻内存。
熟悉的协议,面向 NVMe SSD 的执行路径
速度来自架构,而不是要求应用换一种协议。
Lavik 是 Apache 2.0 开源的 Redis 兼容键值存储。内存保存键索引,NVMe SSD 承载值数据。线程本地状态、协程与异步 I/O 让工作线程在等待存储时继续处理其他请求;SPDK 提供直接访问 NVMe 的存储路径。九月的 SPDK 测试仍使用内核 TCP,并未使用 DPDK 网络。
存储引擎覆盖字符串、哈希、列表、集合与有序集合载荷;集合可使用分组存储。键索引、路由元数据和缓冲区仍消耗内存。字符串 GET/SET 基准并不证明其他数据结构具有相同 QPS。 beta.1 架构 ↗ · 存储与集合 ↗ · Apache 2.0 ↗
容量增长,不必按 DRAM 单价买单
假设模型 · 可调整输入
20× 更低的值容量成本,从单价算起
默认采用 DRAM 5 美元/GiB、NVMe SSD 0.25 美元/GiB 的假设价格,比例为 20:1。它们不是实时报价,也不是云主机月费。
DRAM / SSD 值容量成本比
Valkey DRAM: $5,120 · Lavik NVMe SSD: $256
Value-capacity cost = dataset GiB × media price/GiB
值容量模型不含键与索引内存、缓冲区、CPU、网络、备份、副本或运维。因此 20× 值容量成本差异并不等于整体服务便宜 20 倍。请在完整成本计算器中加入索引内存与共同成本。
何时选择 Lavik
当内存成为扩展瓶颈,且应用使用的 Valkey 命令和客户端在 Lavik 版本化兼容范围内时,可评估 Lavik。按实际延迟预算比较吞吐量,再验证过期、重连和故障切换路径,分阶段迁移。
何时保留现有方案
如果现有适合 DRAM 的工作负载成本合理、应用行为已得到验证,可以保留 Valkey。尤其不要只为提高峰值 QPS 而牺牲写入延迟要求。
从测试到迁移
常见问题
更高 QPS 是否意味着 Lavik 每种操作的延迟都更低?
不是。在 1,000 万键的峰值结果中,Lavik 的 GET/SET 吞吐量与 GET p99 更优,而 Valkey 在其自身 SET 峰值点的 p99 更低。请使用完整连接数扫描,选择满足延迟预算的运行点。
使用 Lavik 需要改用新协议吗?
不需要。Lavik 接受 Redis/Valkey 兼容命令,默认 RESP2,也可协商 RESP3。请根据 beta.1 的命令参考、客户端兼容性和迁移指南验证具体行为;协议兼容不等于所有命令、模块或故障切换行为完全相同。
如何把单机结果用于成本评估?
先选择匹配实际读写比例与延迟预算的实测点,再同时考虑数据容量和 QPS 所需节点数。把索引内存、复制、容量余量与故障场景纳入真实回放。页面成本模型是明确假设下的规划示例,不是多节点集群实测或云服务报价。
来源与版本
基准绑定上游提交;产品文档按标注日期核对。八月历史构建与九月 beta.1 结果保留各自范围,不跨实验拼接。
APACHE 2.0 · REDIS COMPATIBLE · NVMe SSD