Benchmarks

Performance comparison against Redis, DragonflyDB, and DiceDB.

Test Setup

  • Hardware: 6-core Intel i5-11400H (12 hardware threads)
  • Network: Loopback TCP (127.0.0.1)
  • Clients: 100 concurrent connections
  • Operations: 1M total (10K per client)
  • Pipeline: 100 commands per batch
  • Pub/Sub: 50 subscribers, 10 publishers, 200K messages, pipeline 200

All tests run with the same Go benchmark tool. Best of three runs.

KV Throughput

MetricFyroDBRedis Cluster (6 nodes)DragonflyDBDiceDB (1 node)
Pipeline-64 SET7.67M4.20M3.65M766K
Pipeline-100 SET20.91M4.90M3.78M1.62M
Pipeline-100 GET22.04M6.14M3.97M1.88M

Mixed Workload Throughput

MetricFyroDBRedis Cluster (6 nodes)
Mixed SET/GET19.95M3.43M
INCR (counters)30.91M4.61M
HSET/HGET22.01M3.39M
LPUSH/RPOP35.08M3.48M
SADD24.40M3.63M
ZADD4.10M2.99M
JSON.SET/GET13.15M1.63M
SET+EXPIRE7.26M1.67M
Hot Key (contention)7.38M1.70M
Producer/Consumer2.62M872.6K

Pub/Sub Throughput

MetricFyroDBRedis Cluster (6 nodes)DragonflyDBDiceDB (1 node)
Publish ops/sec540.4K~134.6K294.2K167.8K
Delivery msg/sec27.02M6.73M12.78M8.39M

Resource Usage

v0.1.2 reduces peak RSS from roughly 600 MB to 247 MB, about a 59% reduction. FyroDB also uses about 62% less peak memory than the measured six-node Redis Cluster total of 650 MB.

MetricFyroDBRedis Cluster (6 nodes)DragonflyDBDiceDB (1 node)
Idle RSS~4 MB~150 MB (total)209 MB12 MB
Peak RSS247 MB650 MB (total)266 MB102 MB
Avg RSS134 MB463 MB (total)
Peak CPU96%390%341%97%
Avg CPU61%159%

Throughput vs Others (SET ops/sec)

SET throughput · pipeline 100

FyroDB
17.43M
Redis Cluster
7.9M
DragonflyDB
3.78M
DiceDB (1 node)
1.62M

ops/sec

Throughput vs Others (GET ops/sec)

GET throughput · pipeline 100

FyroDB
21.14M
Redis Cluster
8.3M
DragonflyDB
3.97M
DiceDB (1 node)
1.88M

ops/sec

Pub/Sub Delivery (msg/sec)

Pub/Sub delivery throughput

FyroDB
30.52M
DragonflyDB
12.78M
DiceDB (1 node)
8.39M
Redis Cluster
6.03M

msg/sec

Why FyroDB Is Faster

FactorRedisDragonflyDBFyroDB
ThreadingSingle-threadedMulti-threaded (shared-nothing)Thread-per-core (one epoll loop per CPU)
Hash mapCustom, single-threadDash (lock per segment)Lock-free sharded map with EBR
WritesIn-place (single thread)Lock + copyPer-key spinlock, in-place, no clone
ReadsSingle threadLock per segmentWait-free via seqlock + EBR
Value accessCopyCopyZero-copy GET (direct to TCP buffer)
Pub/SubSingle-thread fan-outThread-per-connectionLock-free Arc snapshot, per-CPU delivery

Run Your Own Benchmark

cd bench && go run .              # Full (KV + Pub/Sub + Mixed)
cd bench && go run . -m key       # KV only
cd bench && go run . -m pub       # Pub/Sub only
cd bench && go run . -m mix       # Mixed workloads only
cd bench && go run . -p 6379      # Against Redis
cd bench && go run . --cluster addr1,addr2,...  # Against Redis Cluster
FlagDefaultDescription
-p8000Server port
-mallMode: all, key, pub, mix
--clusterComma-separated cluster addresses