← All comparisons

PERFORMANCE · ARCHITECTURE · COST

Lavik vs Valkey

Keep the protocol. Change the economics of capacity.

Lavik vs Valkey 9.1.0: higher measured peak GET and SET QPS on NVMe SSD, the SET latency tradeoff, and DRAM versus SSD capacity economics.

By the Lavik project · Sources checked: 2026-10-13 · Valkey 9.1.0 · DRAM

SEPTEMBER 18, 2026 · BETA.1

Performance, with the measurements attached

1.05×Lavik / peer GET QPS
3.599 msLavik p99 at that GET point
4.543 msPeer p99 at that GET point

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 ↗

Peak QPS per operation and latency at that point
WorkloadSystemQPSp99 (ms)p99.9 (ms)Connections
GETLavik 0.1.0-beta.1 SPDK1,012,1803.5995.631640
GETValkey 9.1.0 · DRAM965,6974.5438.1591280
SETLavik 0.1.0-beta.1 SPDK930,4654.7998.0951280
SETValkey 9.1.0 · DRAM802,5194.3838.8951280

What this result does—and does not—establish

Lavik has higher peak GET and SET QPS in this sweep. Valkey's selected peak SET point has lower p99 latency: 4.383 ms versus Lavik's 4.799 ms. The report includes Valkey's 1/2/4/8/16 I/O-thread configurations; the best SET result uses eight, not sixteen. Valkey persistence was disabled.

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
All measured points available to the cost calculator
SystemWorkloadThreads*ConnectionsQPSp99 (ms)
LavikGET1680390,4940.335
LavikGET16160609,1610.487
LavikGET16320803,0160.959
LavikGET166401,012,1803.599
LavikGET161280940,7139.791
LavikSET1680473,3840.591
LavikSET16160633,8491.071
LavikSET16320759,4881.671
LavikSET16640876,2663.567
LavikSET161280930,4654.799
ValkeyGET180145,6760.895
ValkeyGET1160153,2781.895
ValkeyGET1320155,4083.935
ValkeyGET1640153,6318.095
ValkeyGET11280140,69417.151
ValkeySET180143,5060.871
ValkeySET1160145,8041.967
ValkeySET1320145,6084.159
ValkeySET1640141,9528.767
ValkeySET11280130,76718.303
ValkeyGET280162,0970.663
ValkeyGET2160152,9441.223
ValkeyGET2320157,5622.207
ValkeyGET2640158,2244.607
ValkeyGET21280149,71011.711
ValkeySET280144,6670.743
ValkeySET2160151,5041.247
ValkeySET2320146,8002.351
ValkeySET2640148,3894.927
ValkeySET21280134,25212.415
ValkeyGET480408,3440.327
ValkeyGET4160424,9520.551
ValkeyGET4320440,4090.951
ValkeyGET4640446,1551.823
ValkeyGET41280442,8913.695
ValkeySET480381,3360.359
ValkeySET4160396,4960.575
ValkeySET4320405,7941.031
ValkeySET4640409,7121.871
ValkeySET41280409,8464.447
ValkeyGET880542,9660.287
ValkeyGET8160667,2120.551
ValkeyGET8320789,8311.159
ValkeyGET8640831,0803.503
ValkeyGET81280857,0494.607
ValkeySET880526,5280.287
ValkeySET8160655,2910.519
ValkeySET8320725,4651.199
ValkeySET8640783,7113.519
ValkeySET81280802,5194.383
ValkeyGET1680544,2380.279
ValkeyGET16160692,9050.519
ValkeyGET16320826,6891.463
ValkeyGET16640897,7683.583
ValkeyGET161280965,6974.543
ValkeySET1680510,8930.295
ValkeySET16160607,6200.527
ValkeySET16320686,3031.015
ValkeySET16640703,1163.423
ValkeySET161280741,4694.127

*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 tested Valkey configurations keep the dataset in DRAM. Lavik uses a memory key index with SSD value storage while accepting Redis/Valkey-compatible commands over RESP. A protocol match makes existing client investment useful; it does not prove identical behavior for every command and option.

For long-lived sessions, caches and machine-generated feature data, the important question is whether useful capacity must grow at DRAM prices. Lavik makes NVMe SSD the value-capacity tier, then uses asynchronous execution to pursue high throughput without making the entire value set resident in memory.

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.

01Redis client / RESP
02Worker + DRAM key index
03Asynchronous I/O
04NVMe SSD values

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.

20.0×

DRAM / SSD value-capacity cost ratio

Valkey 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.

Include index memory and shared costs →

When to choose Lavik

Evaluate Lavik when memory is the scaling constraint and your Valkey command/client footprint fits Lavik's versioned compatibility coverage. Compare throughput at your latency budget, then replay expiry, reconnect and failover paths before a staged migration.

When keeping your current system makes sense

Retain Valkey when an existing DRAM-sized workload is economical and its behavior is already proven in your application. In particular, do not trade away a write-latency requirement merely to maximize the headline QPS number.

From evaluation to migration

  1. Inventory commands, data types, scripts and client options against the versioned compatibility coverage. Command reference · Client compatibility
  2. 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.
  3. Validate replication, recovery and capacity headroom during failures, then make a small, reversible traffic cutover. Migration and cluster guides

Frequently asked questions

Does higher QPS mean Lavik has lower latency on every operation?

No. In the 10M-key peak results, Lavik leads GET/SET throughput and GET p99, while Valkey has the lower SET p99 at its own peak. Use the full connection sweep to select an operating point that meets your latency budget.

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

Put your workload behind the comparison.