This is a benchmark repository for https://github.com/redis/rueidis
Rueidis has higher throughput than go-redis v9 across 1, 8, and 64 parallelism settings.
# prepare redis servers
▶ ./redis-server --save "" --appendonly no
▶ ./redis-server --port 7001 --save "" --appendonly no --cluster-enabled yes --cluster-config-file 7001.conf
▶ ./redis-server --port 7002 --save "" --appendonly no --cluster-enabled yes --cluster-config-file 7002.conf
▶ ./redis-server --port 7003 --save "" --appendonly no --cluster-enabled yes --cluster-config-file 7003.conf
▶ ./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 --cluster-yes
# run the benchmark
▶ ./bench.sh
# compare the results
▶ benchstat get*
▶ benchstat set*
Comparing to the go-redis baseline, rueidis can achieve about 88%, 99% and 100% reduction on sec/op
, B/op
and allocs/op
respectively.
▶ benchstat set*
goos: darwin
goarch: arm64
pkg: rueidis-benchmark
│ set-goredis.txt │ set-rueidis.txt │
│ sec/op │ sec/op vs base │
/OneNode/Set-parall(1)-key(16)-val(64)-10 5.536µ ± 14% 3.344µ ± 2% -39.60% (p=0.000 n=10)
/OneNode/Set-parall(1)-key(16)-val(256)-10 5.455µ ± 4% 3.377µ ± 1% -38.09% (p=0.000 n=10)
/OneNode/Set-parall(1)-key(16)-val(1024)-10 5.702µ ± 9% 3.431µ ± 0% -39.83% (p=0.000 n=10)
/OneNode/Set-parall(8)-key(16)-val(64)-10 6.284µ ± 8% 1.067µ ± 1% -83.02% (p=0.000 n=10)
/OneNode/Set-parall(8)-key(16)-val(256)-10 6.186µ ± 12% 1.123µ ± 4% -81.84% (p=0.000 n=10)
/OneNode/Set-parall(8)-key(16)-val(1024)-10 5.841µ ± 10% 1.220µ ± 1% -79.11% (p=0.000 n=10)
/OneNode/Set-parall(64)-key(16)-val(64)-10 6368.5n ± 10% 727.2n ± 1% -88.58% (p=0.000 n=10)
/OneNode/Set-parall(64)-key(16)-val(256)-10 6623.0n ± 13% 890.1n ± 2% -86.56% (p=0.000 n=10)
/OneNode/Set-parall(64)-key(16)-val(1024)-10 6619.5n ± 17% 953.4n ± 1% -85.60% (p=0.000 n=10)
/Cluster/Set-parall(1)-key(16)-val(64)-10 5.486µ ± 6% 3.399µ ± 1% -38.05% (p=0.000 n=10)
/Cluster/Set-parall(1)-key(16)-val(256)-10 5.676µ ± 8% 3.415µ ± 0% -39.83% (p=0.000 n=10)
/Cluster/Set-parall(1)-key(16)-val(1024)-10 5.686µ ± 4% 3.465µ ± 1% -39.06% (p=0.000 n=10)
/Cluster/Set-parall(8)-key(16)-val(64)-10 6.387µ ± 7% 1.133µ ± 2% -82.26% (p=0.000 n=10)
/Cluster/Set-parall(8)-key(16)-val(256)-10 6.048µ ± 8% 1.183µ ± 1% -80.44% (p=0.000 n=10)
/Cluster/Set-parall(8)-key(16)-val(1024)-10 6.220µ ± 12% 1.282µ ± 1% -79.39% (p=0.000 n=10)
/Cluster/Set-parall(64)-key(16)-val(64)-10 6326.5n ± 9% 782.9n ± 6% -87.63% (p=0.000 n=10)
/Cluster/Set-parall(64)-key(16)-val(256)-10 7064.5n ± 14% 984.2n ± 3% -86.07% (p=0.000 n=10)
/Cluster/Set-parall(64)-key(16)-val(1024)-10 6.741µ ± 8% 1.026µ ± 1% -84.79% (p=0.000 n=10)
geomean 6.108µ 1.521µ -75.09%
│ set-goredis.txt │ set-rueidis.txt │
│ B/op │ B/op vs base │
/OneNode/Set-parall(1)-key(16)-val(64)-10 257.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(1)-key(16)-val(256)-10 257.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(1)-key(16)-val(1024)-10 257.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(8)-key(16)-val(64)-10 264.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(8)-key(16)-val(256)-10 264.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(8)-key(16)-val(1024)-10 264.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(64)-key(16)-val(64)-10 269.000 ± 0% 1.000 ± 0% -99.63% (p=0.000 n=10)
/OneNode/Set-parall(64)-key(16)-val(256)-10 269.000 ± 0% 1.000 ± 0% -99.63% (p=0.000 n=10)
/OneNode/Set-parall(64)-key(16)-val(1024)-10 269.000 ± 0% 1.000 ± 0% -99.63% (p=0.000 n=10)
/Cluster/Set-parall(1)-key(16)-val(64)-10 256.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(1)-key(16)-val(256)-10 256.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(1)-key(16)-val(1024)-10 256.5 ± 0% 0.0 ± ? -100.00% (p=0.000 n=10)
/Cluster/Set-parall(8)-key(16)-val(64)-10 261.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(8)-key(16)-val(256)-10 262.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(8)-key(16)-val(1024)-10 262.0 ± 0% 0.0 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(64)-key(16)-val(64)-10 264.000 ± 0% 1.000 ± 0% -99.62% (p=0.000 n=10)
/Cluster/Set-parall(64)-key(16)-val(256)-10 264.000 ± 0% 1.000 ± 100% -99.62% (p=0.000 n=10)
/Cluster/Set-parall(64)-key(16)-val(1024)-10 264.000 ± 0% 1.000 ± 0% -99.62% (p=0.000 n=10)
geomean 261.9 ? ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean
│ set-goredis.txt │ set-rueidis.txt │
│ allocs/op │ allocs/op vs base │
/OneNode/Set-parall(1)-key(16)-val(64)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(1)-key(16)-val(256)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(1)-key(16)-val(1024)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(8)-key(16)-val(64)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(8)-key(16)-val(256)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(8)-key(16)-val(1024)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(64)-key(16)-val(64)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(64)-key(16)-val(256)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Set-parall(64)-key(16)-val(1024)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(1)-key(16)-val(64)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(1)-key(16)-val(256)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(1)-key(16)-val(1024)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(8)-key(16)-val(64)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(8)-key(16)-val(256)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(8)-key(16)-val(1024)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(64)-key(16)-val(64)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(64)-key(16)-val(256)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Set-parall(64)-key(16)-val(1024)-10 9.000 ± 0% 0.000 ± 0% -100.00% (p=0.000 n=10)
geomean 9.000 ? ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean
Comparing to the go-redis baseline, rueidis can achieve about 92%, 76% and 87% reduction on sec/op
, B/op
and allocs/op
respectively.
With the client-side caching, rueidis can achieve about 97%, 99% and 100% reduction on sec/op
, B/op
and allocs/op
respectively in cache hit scenario.
goos: darwin
goarch: arm64
pkg: rueidis-benchmark
│ get-goredis.txt │ get-rueidis.txt │ get-rueidiscsc.txt │
│ sec/op │ sec/op vs base │ sec/op vs base │
/OneNode/Get-parall(1)-key(16)-val(64)-10 5491.5n ± 14% 3075.5n ± 2% -44.00% (p=0.000 n=10) 151.2n ± 4% -97.25% (p=0.000 n=10)
/OneNode/Get-parall(1)-key(16)-val(256)-10 5766.0n ± 7% 3124.5n ± 1% -45.81% (p=0.000 n=10) 149.0n ± 4% -97.42% (p=0.000 n=10)
/OneNode/Get-parall(1)-key(16)-val(1024)-10 5495.5n ± 11% 3320.0n ± 1% -39.59% (p=0.000 n=10) 151.5n ± 2% -97.24% (p=0.000 n=10)
/OneNode/Get-parall(8)-key(16)-val(64)-10 5377.5n ± 12% 719.5n ± 2% -86.62% (p=0.000 n=10) 150.1n ± 2% -97.21% (p=0.000 n=10)
/OneNode/Get-parall(8)-key(16)-val(256)-10 5503.5n ± 19% 761.8n ± 15% -86.16% (p=0.000 n=10) 150.7n ± 3% -97.26% (p=0.000 n=10)
/OneNode/Get-parall(8)-key(16)-val(1024)-10 6178.0n ± 8% 1003.5n ± 5% -83.76% (p=0.000 n=10) 151.2n ± 1% -97.55% (p=0.000 n=10)
/OneNode/Get-parall(64)-key(16)-val(64)-10 5878.5n ± 9% 470.4n ± 7% -92.00% (p=0.000 n=10) 155.2n ± 1% -97.36% (p=0.000 n=10)
/OneNode/Get-parall(64)-key(16)-val(256)-10 6498.5n ± 13% 588.0n ± 12% -90.95% (p=0.000 n=10) 152.2n ± 3% -97.66% (p=0.000 n=10)
/OneNode/Get-parall(64)-key(16)-val(1024)-10 6714.0n ± 7% 834.0n ± 10% -87.58% (p=0.000 n=10) 152.5n ± 1% -97.73% (p=0.000 n=10)
/Cluster/Get-parall(1)-key(16)-val(64)-10 5089.0n ± 27% 3174.5n ± 3% -37.62% (p=0.000 n=10) 165.3n ± 1% -96.75% (p=0.000 n=10)
/Cluster/Get-parall(1)-key(16)-val(256)-10 5534.0n ± 17% 3221.0n ± 0% -41.80% (p=0.000 n=10) 167.5n ± 2% -96.97% (p=0.000 n=10)
/Cluster/Get-parall(1)-key(16)-val(1024)-10 5643.5n ± 19% 3356.0n ± 1% -40.53% (p=0.000 n=10) 166.9n ± 2% -97.04% (p=0.000 n=10)
/Cluster/Get-parall(8)-key(16)-val(64)-10 5928.0n ± 13% 762.1n ± 1% -87.14% (p=0.000 n=10) 160.3n ± 4% -97.30% (p=0.000 n=10)
/Cluster/Get-parall(8)-key(16)-val(256)-10 6144.5n ± 21% 796.0n ± 2% -87.04% (p=0.000 n=10) 161.9n ± 2% -97.36% (p=0.000 n=10)
/Cluster/Get-parall(8)-key(16)-val(1024)-10 5931.0n ± 7% 958.5n ± 10% -83.84% (p=0.000 n=10) 162.5n ± 1% -97.26% (p=0.000 n=10)
/Cluster/Get-parall(64)-key(16)-val(64)-10 5721.0n ± 11% 622.0n ± 34% -89.13% (p=0.000 n=10) 168.7n ± 0% -97.05% (p=0.000 n=10)
/Cluster/Get-parall(64)-key(16)-val(256)-10 6164.5n ± 16% 537.8n ± 5% -91.28% (p=0.000 n=10) 167.0n ± 2% -97.29% (p=0.000 n=10)
/Cluster/Get-parall(64)-key(16)-val(1024)-10 7035.5n ± 7% 787.0n ± 5% -88.81% (p=0.000 n=10) 167.2n ± 2% -97.62% (p=0.000 n=10)
geomean 5.875µ 1.185µ -79.83% 158.2n -97.31%
│ get-goredis.txt │ get-rueidis.txt │ get-rueidiscsc.txt │
│ B/op │ B/op vs base │ B/op vs base │
/OneNode/Get-parall(1)-key(16)-val(64)-10 269.00 ± 0% 64.00 ± 0% -76.21% (p=0.000 n=10) 0.00 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(1)-key(16)-val(256)-10 477.0 ± 0% 256.0 ± 0% -46.33% (p=0.000 n=10) 0.0 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(1)-key(16)-val(1024)-10 1.310Ki ± 0% 1.000Ki ± 0% -23.64% (p=0.000 n=10) 0.000Ki ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(8)-key(16)-val(64)-10 276.00 ± 0% 64.00 ± 0% -76.81% (p=0.000 n=10) 0.00 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(8)-key(16)-val(256)-10 484.0 ± 0% 256.0 ± 0% -47.11% (p=0.000 n=10) 0.0 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(8)-key(16)-val(1024)-10 1.317Ki ± 0% 1.000Ki ± 0% -24.09% (p=0.000 n=10) 0.000Ki ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(64)-key(16)-val(64)-10 281.0000 ± 0% 65.0000 ± 0% -76.87% (p=0.000 n=10) 0.5000 ± ? -99.82% (p=0.000 n=10)
/OneNode/Get-parall(64)-key(16)-val(256)-10 489.000 ± 0% 257.000 ± 0% -47.44% (p=0.000 n=10) 1.000 ± ? -99.80% (p=0.000 n=10)
/OneNode/Get-parall(64)-key(16)-val(1024)-10 1354.000 ± 0% 1025.000 ± 0% -24.30% (p=0.000 n=10) 1.000 ± ? -99.93% (p=0.000 n=10)
/Cluster/Get-parall(1)-key(16)-val(64)-10 268.00 ± 0% 64.00 ± 0% -76.12% (p=0.000 n=10) 0.00 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(1)-key(16)-val(256)-10 477.0 ± 0% 256.0 ± 0% -46.33% (p=0.000 n=10) 0.0 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(1)-key(16)-val(1024)-10 1.310Ki ± 0% 1.000Ki ± 0% -23.64% (p=0.000 n=10) 0.000Ki ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(8)-key(16)-val(64)-10 273.50 ± 0% 64.00 ± 0% -76.60% (p=0.000 n=10) 0.00 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(8)-key(16)-val(256)-10 482.0 ± 0% 256.0 ± 0% -46.89% (p=0.000 n=10) 0.0 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(8)-key(16)-val(1024)-10 1.315Ki ± 0% 1.000Ki ± 0% -23.98% (p=0.000 n=10) 0.000Ki ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(64)-key(16)-val(64)-10 276.000 ± 0% 65.000 ± 0% -76.45% (p=0.000 n=10) 1.000 ± ? -99.64% (p=0.000 n=10)
/Cluster/Get-parall(64)-key(16)-val(256)-10 484.000 ± 0% 257.000 ± 0% -46.90% (p=0.000 n=10) 1.000 ± ? -99.79% (p=0.000 n=10)
/Cluster/Get-parall(64)-key(16)-val(1024)-10 1.317Ki ± 0% 1.001Ki ± 0% -24.02% (p=0.000 n=10) 0.000Ki ± ? -100.00% (p=0.000 n=10)
geomean 562.4 256.6 -54.37% ? ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean
│ get-goredis.txt │ get-rueidis.txt │ get-rueidiscsc.txt │
│ allocs/op │ allocs/op vs base │ allocs/op vs base │
/OneNode/Get-parall(1)-key(16)-val(64)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(1)-key(16)-val(256)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(1)-key(16)-val(1024)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(8)-key(16)-val(64)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(8)-key(16)-val(256)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(8)-key(16)-val(1024)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(64)-key(16)-val(64)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(64)-key(16)-val(256)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/OneNode/Get-parall(64)-key(16)-val(1024)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(1)-key(16)-val(64)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(1)-key(16)-val(256)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(1)-key(16)-val(1024)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(8)-key(16)-val(64)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(8)-key(16)-val(256)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(8)-key(16)-val(1024)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(64)-key(16)-val(64)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(64)-key(16)-val(256)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
/Cluster/Get-parall(64)-key(16)-val(1024)-10 8.000 ± 0% 1.000 ± 0% -87.50% (p=0.000 n=10) 0.000 ± 0% -100.00% (p=0.000 n=10)
geomean 8.000 1.000 -87.50% ? ¹ ²
¹ summaries must be >0 to compute geomean
² ratios must be >0 to compute geomean