Skip to content

redis-performance/redis-zbench-go

Folders and files

NameName
Last commit message
Last commit date
Sep 20, 2023
May 12, 2021
May 11, 2021
May 13, 2021
Mar 9, 2023
Feb 28, 2023
May 13, 2021
Feb 28, 2023
Feb 28, 2023
Sep 20, 2023
May 12, 2021
May 13, 2021

Repository files navigation

redis-zbench-go

Redis Sorted Sets Benchmark

Overview

This repo contains code to trigger load ( ZADD ) or query (ZRANGEBYLEX key min max) benchmarks, with/without transaction, with/without pipelining, and with diversified ways of controlling the per-key size and total keyspace length.

Installation

Download Standalone binaries ( no Golang needed )

If you don't have go on your machine and just want to use the produced binaries you can download the following prebuilt bins:

https://github.com/redis-performance/redis-zbench-go/releases/latest

OS Arch Link
Linux amd64 (64-bit X86) redis-zbench-go-linux-amd64
Linux arm64 (64-bit ARM) redis-zbench-go-linux-arm64
Darwin amd64 (64-bit X86) redis-zbench-go-darwin-amd64
Darwin arm64 (64-bit ARM) redis-zbench-go-darwin-arm64

Here's how bash script to download and try it:

wget -c https://github.com/redis-performance/redis-zbench-go/releases/latest/download/redis-zbench-go-$(uname -mrs | awk '{ print tolower($1) }')-$(dpkg --print-architecture).tar.gz -O - | tar -xz

# give it a try
./redis-zbench-go --help

Installation in a Golang env

The easiest way to get and install the benchmark utility with a Go Env is to use go get and then go install:

# Fetch this repo
go get github.com/redis-performance/redis-zbench-go
cd $GOPATH/src/github.com/redis-performance/redis-zbench-go
make

Usage of redis-zbench-go

To get a full grasp of the tool capabilities please check the --help output

$ ./redis-zbench-go --help
Usage of ./redis-zbench-go:
  -a string
        Password for Redis Auth.
  -c uint
        number of clients. (default 50)
  -d uint
        Data size of each sorted set element. (default 10)
  -debug int
        Client debug level.
  -h string
        Server hostname. (default "127.0.0.1")
  -key-elements-max uint
        Use zipfian random-sized items in the specified range (min-max). (default 10)
  -key-elements-min uint
        Use zipfian random-sized items in the specified range (min-max). (default 1)
  -mode load
        Bechmark mode. One of [load,query]. load will populate the db with sorted sets. `query` will run the zrangebylexscore command .
  -multi
        Run each command in multi-exec.
  -n uint
        Total number of requests. Only used in case of -mode=query (default 10000000)
  -p int
        Server port. (default 12000)
  -pipeline uint
        Redis pipeline value. (default 1)
  -r uint
        keyspace length. (default 1000000)
  -random-seed int
        random seed to be used. (default 12345)
  -rps int
        Max rps. If 0 no limit is applied and the DB is stressed up to maximum.

Sample output - 1M Keys keyspace, 100K issued commands, pipeline of 100 with transaction enabled, while querying at a limit of @10K RPS

Prepopulation

$ ./redis-zbench-go -mode load -r 1000000 -p 6379 
Total clients: 50. Commands per client: 20000 Total commands: 1000000
Using random seed: 12345
                 Test time                    Total Commands              Total Errors                      Command Rate           p50 lat. (msec)
                       18s [100.0%]                   1000000                         0 [0.0%]                   1370.82                      0.81      
#################################################
Total Duration 18.000 Seconds
Total Issued commands 1000000
Total Errors 0
Throughput summary: 55555 requests per second
Latency summary (msec):
          p50       p95       p99
        0.808     1.200     1.582

Querying with piepline of 100, and transction, @10K rps

$ ./redis-zbench-go  -mode query -p 6379 -pipeline 100 -c 10 -multi -rps 10000 -n 100000 -r 1000000
Total clients: 10. Commands per client: 10000 Total commands: 100000
Using random seed: 12345
                 Test time                    Total Commands              Total Errors                      Command Rate           p50 lat. (msec)
                        9s [100.0%]                    100000                         0 [0.0%]                   9095.29                      2.53      
#################################################
Total Duration 9.001 Seconds
Total Issued commands 100000
Total Errors 0
Throughput summary: 11110 requests per second
Latency summary (msec):
          p50       p95       p99
        2.529     3.509     6.083
#################################################
Printing reply histogram
Size: 0 Count: 51962. (% 51.96)
Size: 1 Count: 9774. (% 9.77)
Size: 2 Count: 5124. (% 5.12)
Size: 3 Count: 5276. (% 5.28)
Size: 4 Count: 5088. (% 5.09)
Size: 5 Count: 5152. (% 5.15)
Size: 6 Count: 4943. (% 4.94)
Size: 7 Count: 4694. (% 4.69)
Size: 8 Count: 4547. (% 4.55)
Size: 9 Count: 3440. (% 3.44)
--------------------------------------------------
Total processed replies 100000