Ruvio.

Testing · evidence · limitations

Performance and scale

Measured throughput is specific to workload, durability, key shape, client concurrency and hardware. No number here is a universal capacity guarantee.

17-command Redis comparison · 2026-10-07

Goal: compare native throughput across common commands, including list, set, hash and sorted-set operations. Environment: Apple M4 Pro, 12 cores, 24 GiB, macOS 26.6.2 arm64; native Ruvio 0.2.10 release rebuilt from 203f4fc plus uncommitted TTL deadline-index accounting changes; Redis 8.10.2. Both are separate loopback processes: Ruvio one shard with memory durability; Redis RDB and AOF disabled. This build is not identifiable by the commit alone.

Method: redis-benchmark, 50 clients, pipeline 16, 64-byte values, three rounds per command with alternating measurement order. Each server stays running across rounds; the table reports median requests/s. Most commands ran 1,000,000 requests per round; LRANGE 100/300/500/600 ran 200k/100k/60k/50k, and MSET ran 500k. LLEN verified that both servers' LRANGE reads used nonempty lists (200k/300k/360k/410k elements in round one). The full comparison, including a separate string-memory load, took 75.8 s.

CommandRuvio median req/sRedis median req/sRuvio / Redis
PING (bulk)2.67M2.67M1.00×
SET2.61M2.16M1.21×
GET2.74M2.38M1.15×
INCR2.88M2.57M1.12×
LPUSH2.18M1.79M1.22×
RPUSH2.21M1.88M1.17×
LPOP2.02M1.74M1.16×
RPOP2.03M1.80M1.13×
SADD2.28M2.35M0.97×
HSET2.17M1.82M1.19×
SPOP2.51M2.77M0.91×
ZADD2.30M1.88M1.22×
LRANGE 1000.22M0.22M1.00×
LRANGE 3000.08M0.07M1.04×
LRANGE 5000.04M0.04M1.03×
LRANGE 6000.04M0.03M1.15×
MSET1.40M0.43M3.27×

Interpretation: Ruvio leads SET, GET, INCR and MSET in this workload; Redis leads SADD and SPOP, with SADD inside the approximate ±10% host-variation tie band. Ratios use unrounded rates. Limit: mostly fixed-key pipelined loopback throughput is not production throughput, tail latency, durability throughput, TTL churn or a many-key scaling test. These are three local rounds on one unpinned machine, not confidence intervals. See the separate memory and churn results for the same build.

Native command comparison · 2026-10-04

Goal: compare common command throughput with Redis 8.10.2. Environment: Apple M4 Pro, macOS arm64, native release binary of 1d7e691 with the measured hot-path changes, one shard, memory durability, loopback; Redis persistence disabled. Method: redis-benchmark, 50 clients, pipeline 16, 64-byte values, three rounds on the same fresh pair of servers, alternating measurement order. Most commands used one million requests; key distribution and counts vary by command.

CommandRuvio medianRedis medianInterpretation
SET2.73M/s2.17M/s1.26× on this workload
GET2.90M/s2.65M/s1.09×; within the host's ±10% tie band
INCR2.99M/s2.51M/s1.19× on this workload
SPOP2.56M/s2.65M/sRuvio 0.97×; within the tie band

Limit: pipelined fixed-key loopback results are not networked production throughput, tail latency, TTL churn, or durability throughput. The 2026-10-01 LRANGE measurements likely read an empty list; this 2026-10-04 run checks LLEN after each list read. Reproduce with cargo build --release --bin ruvio and python3 scripts/redis_compare.py --out target/redis-compare.

Four-core bare-metal baseline · 2026-09-28

Environment: pinned Cherry EPYC 7313P Ubuntu host, four Ruvio shards versus four Redis 8.10.2 processes, both memory durability, 25 clients and 500k requests per shard, pipeline 16, 64 bytes; five matrix samples. Result: aggregate SET medians 3.05M/s versus 2.49M/s; GET 3.21M/s versus 3.26M/s. Limit: historical pre-WAL-change build, not today's binary or a Redis Cluster comparison. Multi-shard p99 is the slowest shard, not an aggregate latency percentile.

Bare-metal setup, full matrix and 15-minute soaks