curl -fsSL https://cachecannon.cc/install.sh | bash
A deep-dive benchmarking tool for Valkey. Go beyond quick throughput checks. Mix workloads, control rate, watch tail latency per second, and find your server's saturation point.
Zero-config defaults, just run it
16 connections, pipeline 32, Zipfian keys
Prefill every key, then benchmark reads
Pin load to 500K req/s, measure latency
Find max rate where p999 stays under SLO
Save time-series to Parquet, open dashboard
Short flags are compatible with valkey-benchmark (-c,
-P, -d, etc.), but examples here use
--named-arguments so you can read them. Full reference in
VALKEY-LAB.md.
Benchmark output is something you stare at. valkey-lab uses a deliberate
color hierarchy so the numbers you care about stand out and the rest stays
quiet. req/s and p999 are bold white.
Everything else is dimmed. Errors turn red the instant they appear.
The header reprints every 25 rows so you never lose context during a long run.
This is not cosmetic. When you're watching a 5-minute saturation search or debugging a latency spike in production, the difference between scanning a wall of monochrome numbers and seeing the one column that matters bolded is the difference between catching the problem and scrolling past it.
req/s and p999 are bold white. Time, p50, p90, p99, p9999, max, hit% are all dimmed. Your eye goes straight to throughput and the latency percentile that usually trips SLOs.
Cyan for config labels. Green for PASS. Red for FAIL and errors. Yellow for throughput warnings. Dim for separators and low-signal columns. Every color has a reason.
One row per second with full p50 through p9999 and max. Spikes that disappear in aggregate percentiles show up as individual rows in the time series.
valkey-benchmark is good for quick throughput checks.
valkey-lab builds on that foundation with controls for the questions that
come next: what happens under mixed traffic, at a controlled rate,
with realistic key distributions, over time?
Concurrent GETs and SETs at any ratio
Measure latency at a fixed request rate
Warm cache and discard early samples
Catch spikes that hide in aggregates
Zipfian hot-key patterns
Parquet time-series + web dashboard
Ramps request rate geometrically until your latency SLO breaks. Classifies failures as throughput-limited (server can't keep up) or latency-exceeded (server keeps up but tail latency blows).
valkey-lab saturate --slo-p999 1ms --connections 16 --pipeline 32