性能 · 架构 · 成本
Lavik vs Redis
实测吞吐量更高,容量突破 DRAM 成本约束。
比较 NVMe SSD 上的 Lavik 与 DRAM 中的 Redis 8.8.0:GET/SET 峰值吞吐量、尾延迟、Redis 兼容性与透明的 20:1 容量成本模型。
Lavik 项目团队 · 资料核对: 2026-10-13 · Redis 8.8.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 | Redis 8.8.0 · DRAM | 976,801 | 4.671 | 8.031 | 1280 |
| SET | Lavik 0.1.0-beta.1 SPDK | 930,465 | 4.799 | 8.095 | 1280 |
| SET | Redis 8.8.0 · DRAM | 910,426 | 4.831 | 8.127 | 1280 |
读懂这个结果
这是开源 Redis 服务端的结果,并非 Redis Cloud 或 Redis Flex。测试关闭了 Redis AOF 和自动快照。1,000 万键数据集可放入服务器内存;它说明实测吞吐量,不代表 TB 级 Redis 容量结果。两者峰值对应的连接数也不同。
这是 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 |
| Redis | GET | 1 | 80 | 153,083 | 0.831 |
| Redis | GET | 1 | 160 | 157,964 | 1.839 |
| Redis | GET | 1 | 320 | 157,926 | 3.855 |
| Redis | GET | 1 | 640 | 155,628 | 7.999 |
| Redis | GET | 1 | 1280 | 135,528 | 17.535 |
| Redis | SET | 1 | 80 | 141,386 | 0.903 |
| Redis | SET | 1 | 160 | 147,828 | 1.943 |
| Redis | SET | 1 | 320 | 148,280 | 4.095 |
| Redis | SET | 1 | 640 | 144,757 | 8.575 |
| Redis | SET | 1 | 1280 | 132,318 | 18.047 |
| Redis | GET | 2 | 80 | 159,791 | 0.743 |
| Redis | GET | 2 | 160 | 156,291 | 1.855 |
| Redis | GET | 2 | 320 | 159,579 | 3.775 |
| Redis | GET | 2 | 640 | 158,707 | 7.871 |
| Redis | GET | 2 | 1280 | 135,888 | 18.175 |
| Redis | SET | 2 | 80 | 140,556 | 0.903 |
| Redis | SET | 2 | 160 | 146,852 | 2.063 |
| Redis | SET | 2 | 320 | 148,384 | 4.095 |
| Redis | SET | 2 | 640 | 146,868 | 8.511 |
| Redis | SET | 2 | 1280 | 122,610 | 19.711 |
| Redis | GET | 4 | 80 | 345,041 | 0.423 |
| Redis | GET | 4 | 160 | 415,231 | 0.607 |
| Redis | GET | 4 | 320 | 418,773 | 1.255 |
| Redis | GET | 4 | 640 | 436,230 | 2.751 |
| Redis | GET | 4 | 1280 | 434,769 | 5.951 |
| Redis | SET | 4 | 80 | 335,186 | 0.423 |
| Redis | SET | 4 | 160 | 392,258 | 0.631 |
| Redis | SET | 4 | 320 | 392,054 | 1.399 |
| Redis | SET | 4 | 640 | 401,369 | 3.071 |
| Redis | SET | 4 | 1280 | 396,396 | 6.751 |
| Redis | GET | 8 | 80 | 440,057 | 0.351 |
| Redis | GET | 8 | 160 | 590,545 | 0.543 |
| Redis | GET | 8 | 320 | 702,442 | 0.943 |
| Redis | GET | 8 | 640 | 807,686 | 2.671 |
| Redis | GET | 8 | 1280 | 835,794 | 4.415 |
| Redis | SET | 8 | 80 | 434,791 | 0.359 |
| Redis | SET | 8 | 160 | 585,797 | 0.543 |
| Redis | SET | 8 | 320 | 692,107 | 0.959 |
| Redis | SET | 8 | 640 | 787,430 | 2.863 |
| Redis | SET | 8 | 1280 | 814,410 | 4.671 |
| Redis | GET | 16 | 80 | 424,582 | 0.335 |
| Redis | GET | 16 | 160 | 574,702 | 0.559 |
| Redis | GET | 16 | 320 | 769,130 | 0.975 |
| Redis | GET | 16 | 640 | 919,799 | 3.471 |
| Redis | GET | 16 | 1280 | 976,801 | 4.671 |
| Redis | SET | 16 | 80 | 397,637 | 0.359 |
| Redis | SET | 16 | 160 | 570,474 | 0.535 |
| Redis | SET | 16 | 320 | 717,900 | 0.983 |
| Redis | SET | 16 | 640 | 851,460 | 3.071 |
| Redis | SET | 16 | 1280 | 910,426 | 4.831 |
*线程角色不同:Lavik 工作线程、Redis/Valkey I/O 线程、Dragonfly proactor、Garnet 最小线程池线程。 CSV ↗
存储设计如何影响你的应用
本次 Redis 对照组从 DRAM 提供数据。Lavik 将键索引保留在内存,将值存入 NVMe SSD。客户端仍使用 RESP 协议;改变的是存储与执行方式,而非应用协议。
不断增长的缓存可能在耗尽 CPU 之前就需要扩充内存。将值容量迁至 SSD,可以缓解压力并保留熟悉的命令。Lavik 的工作线程本地状态、协程运行时与异步存储路径,使请求在 I/O 完成期间仍可持续推进。
熟悉的协议,面向 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 值容量成本比
Redis DRAM: $5,120 · Lavik NVMe SSD: $256
Value-capacity cost = dataset GiB × media price/GiB
值容量模型不含键与索引内存、缓冲区、CPU、网络、备份、副本或运维。因此 20× 值容量成本差异并不等于整体服务便宜 20 倍。请在完整成本计算器中加入索引内存与共同成本。
何时选择 Lavik
当值数据增长推动 DRAM 账单上升时,优先评估 Lavik,尤其适用于访问分布广、无法依赖极小热点集的缓存与特征查询。请在 beta.1 上验证实际命令、脚本、过期行为和恢复要求。
何时保留现有方案
如果现有 Redis 容量成本可接受、运维能力满足需求,或必需的命令及模块行为尚未通过 Lavik 兼容性测试,可以继续使用。迁移收益应超过验证与切换的投入。
从测试到迁移
常见问题
Lavik 是否比 Redis 便宜 20 倍?
对于值容量,若 DRAM 每 GiB 单价为 SSD 的 20 倍,则介质成本降至 1/20。这是明确的价格假设,并非整个服务账单的实测结果;仍需计入索引内存、CPU、副本、备份和运维成本。
使用 Lavik 需要改用新协议吗?
不需要。Lavik 接受 Redis/Valkey 兼容命令,默认 RESP2,也可协商 RESP3。请根据 beta.1 的命令参考、客户端兼容性和迁移指南验证具体行为;协议兼容不等于所有命令、模块或故障切换行为完全相同。
如何把单机结果用于成本评估?
先选择匹配实际读写比例与延迟预算的实测点,再同时考虑数据容量和 QPS 所需节点数。把索引内存、复制、容量余量与故障场景纳入真实回放。页面成本模型是明确假设下的规划示例,不是多节点集群实测或云服务报价。
来源与版本
基准绑定上游提交;产品文档按标注日期核对。八月历史构建与九月 beta.1 结果保留各自范围,不跨实验拼接。
APACHE 2.0 · REDIS COMPATIBLE · NVMe SSD