PERFORMANCE · ARCHITECTURE · COST
Lavik vs Redis
Faster measured throughput. Capacity beyond DRAM.
Compare Lavik on NVMe SSD with Redis 8.8.0 in DRAM: peak GET/SET QPS, tail latency, Redis compatibility, and a transparent 20:1 capacity-cost model.
By the Lavik project · Sources checked: 2026-10-13 · Redis 8.8.0 · DRAM
SEPTEMBER 18, 2026 · BETA.1
Performance, with the measurements attached
10M keys × 1 KiB values; AMD EPYC 9V74, approximately 126 GiB RAM, six NVMe devices, 16-logical-CPU affinity, pipeline=1. Each point measured once for 30 seconds. Peer controls come from an earlier sweep on the same hosts; beta.1 SPDK points are newly measured. Each operation selects each system's highest-QPS point; connection counts can differ. Method and full report ↗
| Workload | System | QPS | p99 (ms) | p99.9 (ms) | Connections |
|---|---|---|---|---|---|
| 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 |
What this result does—and does not—establish
These are open-source Redis server results, not Redis Cloud or Redis Flex. Redis AOF and automatic snapshots were disabled. The 10-million-key dataset fits the server's RAM; it establishes measured throughput, not a terabyte-scale Redis capacity result. Different peak connection counts also matter.
These are Lavik-published benchmarks, not an independent reproduction. Short single-server windows do not establish equal crash durability, long-term steady state, cluster capacity or an application SLA. Match your workload, data distribution and latency budget before using the cost model.
Inspect the full connection and thread sweep
| System | Workload | Threads* | Connections | 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 |
*Thread roles differ: Lavik workers, Redis/Valkey I/O threads, Dragonfly proactors, and Garnet minimum thread-pool threads. CSV ↗
How the storage design affects your application
The Redis control serves its dataset from DRAM. Lavik keeps its key index in memory and stores values on NVMe SSD. Redis clients still speak RESP; the change is in storage and execution, rather than a new application protocol.
A growing cache can require more memory capacity long before it exhausts CPU. Moving value capacity to SSD can reduce that pressure while retaining familiar commands. Lavik's worker-owned state, coroutine runtime and asynchronous storage paths are designed to keep requests progressing while I/O completes.
Lavik beta.1 system architecture ↗ · Lavik beta.1 storage and recovery ↗
FAMILIAR PROTOCOL. NVMe SSD EXECUTION.
The architecture changes. Your application protocol stays familiar.
Lavik is an Apache 2.0 open-source, Redis-compatible key-value store. Memory holds the key index; NVMe SSD holds value data. Worker-local state, coroutines and asynchronous I/O let workers advance other requests while storage completes. SPDK provides a direct NVMe storage path. The September SPDK experiment still uses kernel TCP, not DPDK networking.
The storage engine covers string, hash, list, set and sorted-set payloads, including grouped collection storage. Key indexes, routing metadata and buffers still consume RAM. String GET/SET benchmarks do not establish the same QPS for other data structures. beta.1 architecture ↗ · Storage and collections ↗ · Apache 2.0 ↗
Growing capacity need not carry a DRAM price tag
ILLUSTRATIVE MODEL · EDIT THE ASSUMPTIONS
20× lower value-capacity cost starts with the unit price
The defaults assume DRAM at $5/GiB and NVMe SSD at $0.25/GiB: a 20:1 ratio. These are illustrative media prices, not live quotes or monthly cloud instance prices.
DRAM / SSD value-capacity cost ratio
Redis DRAM: $5,120 · Lavik NVMe SSD: $256
Value-capacity cost = dataset GiB × media price/GiB
This value-capacity model excludes key/index memory, buffers, CPU, network, backups, replicas and operations. A 20× value-capacity difference therefore does not mean a 20× cheaper complete service. Add index memory and shared costs in the full capacity calculator.
When to choose Lavik
Prioritize Lavik when value growth drives your DRAM bill, especially for broad-access caches and feature lookups that cannot rely on a tiny hot set. Validate your exact commands, scripts, expiration behavior and recovery requirements on beta.1.
When keeping your current system makes sense
Keep your existing Redis deployment when its capacity cost is acceptable and it already satisfies your operational needs, or when required command/module behavior has not passed your Lavik compatibility tests. Migration value should exceed the effort of validation and cutover.
From evaluation to migration
- Inventory commands, data types, scripts and client options against the versioned compatibility coverage. Command reference · Client compatibility
- Replay your data distribution, expiry rate and read/write mix on representative NVMe SSD hardware. Compare target p99/p99.9 rather than only peak QPS.
- Validate replication, recovery and capacity headroom during failures, then make a small, reversible traffic cutover. Migration and cluster guides
Frequently asked questions
Is Lavik 20× cheaper than Redis?
For value capacity, a DRAM price per GiB that is 20 times the SSD price gives 20× lower media cost. This is an explicit price assumption, not a measured whole-service bill. Index memory, CPU, replicas, backup and operational costs remain.
Does Lavik require a new application protocol?
No. Lavik accepts Redis/Valkey-compatible commands, with RESP2 by default and negotiable RESP3. Verify exact behavior against the beta.1 command reference, client compatibility and migration guides; protocol compatibility does not mean every command, module or failover behavior is identical.
How should I use a single-server benchmark for cost planning?
Select an observed point matching your read/write mix and latency budget, then account for both capacity-driven and QPS-driven node counts. Include index memory, replication, headroom and failures in your replay. The page's cost model is an explicit planning illustration, not a measured cluster result or cloud quote.
Sources and versions
Benchmarks are pinned to an upstream commit; product documentation was checked on the date shown. Historical August builds and September beta.1 results retain their own scope and are not combined across experiments.
APACHE 2.0 · REDIS COMPATIBLE · NVMe SSD