Skip to main content

No project description provided

Project description

resp-benchmark

License

resp-benchmark is a benchmark tool for testing databases that support the RESP protocol, such as Redis, Valkey, and Tair. It offers both a command-line interface and a Python library.

Installation

Requires Python 3.8 or higher.

pip install resp-benchmark

Usage

Command-Line Tool

resp-benchmark --help

Python Library

from resp_benchmark import Benchmark

bm = Benchmark(host="127.0.0.1", port=6379)
bm.flushall()
bm.load_data(command="SET {key sequence 10000000} {value 64}", count=1000000, connections=128)
result = bm.bench("GET {key uniform 10000000}", seconds=3, connections=16)
print(result.qps, result.avg_latency_ms, result.p99_latency_ms)

Custom Commands

resp-benchmark supports custom test commands using placeholder syntax like SET {key uniform 10000000} {value 64} which means the SET command will have a key uniformly distributed in the range 0-10000000 and a value of 64 bytes.

Supported placeholders include:

  • {key uniform N}: Generates a random number between 0 and N-1. For example, {key uniform 100} might generate key_0000000099.
  • {key sequence N}: Sequentially generates from 0 to N-1, ensuring coverage during data loading. For example, {key sequence 100} generates key_0000000000, key_0000000001, etc.
  • {key zipfian N}: Generates according to a Zipfian distribution (exponent 1.03), simulating real-world key distribution.
  • {value N}: Generates a random string of length N bytes. For example, {value 8} might generate 92xsqdNg.
  • {rand N}: Generates a random number between 0 and N-1. For example, {rand 100} might generate 99.
  • {range N W}: Generates a pair of random numbers within the range 0 to N-1, with a difference of W, used for testing *range* commands. For example, {range 100 10} might generate 89 99.

Best Practices

Benchmarking zset

# 1. Load data
resp-benchmark --load -n 1000000 -P 10 "ZADD {key sequence 1000} {rand 1000} {value 8}"
# 2. Benchmark
resp-benchmark "ZRANGEBYSCORE {key uniform 1000} {range 1000 10}"

Benchmarking Lua Scripts

redis-cli 'SCRIPT LOAD "return redis.call('\''SET'\'', KEYS[1], ARGV[1])"'
resp-benchmark "EVALSHA d8f2fad9f8e86a53d2a6ebd960b33c4972cacc37 1 {key uniform 100000} {value 64}"

Differences with redis-benchmark

When testing Redis with resp-benchmark and redis-benchmark, you might get different results due to:

  1. redis-benchmark always uses the same value when testing the set command, which does not trigger DB persistence and replication. In contrast, resp-benchmark uses {value 64} to generate different data for each command.
  2. redis-benchmark always uses the same primary key when testing list/set/zset/hash commands, while resp-benchmark generates different keys using placeholders like {key uniform 10000000}.
  3. In cluster mode, redis-benchmark sends requests to each node, but all requests target the same slot on every node.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

resp_benchmark-0.1.3.tar.gz (24.1 kB view hashes)

Uploaded Source

Built Distributions

resp_benchmark-0.1.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl (1.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ x86-64

resp_benchmark-0.1.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl (1.4 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ i686

resp_benchmark-0.1.3-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl (1.4 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARMv7l

resp_benchmark-0.1.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl (1.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARM64

resp_benchmark-0.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

resp_benchmark-0.1.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

resp_benchmark-0.1.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

resp_benchmark-0.1.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

resp_benchmark-0.1.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl (1.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ x86-64

resp_benchmark-0.1.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl (1.4 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ i686

resp_benchmark-0.1.3-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl (1.4 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARMv7l

resp_benchmark-0.1.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl (1.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARM64

resp_benchmark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

resp_benchmark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

resp_benchmark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

resp_benchmark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

resp_benchmark-0.1.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

resp_benchmark-0.1.3-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl (1.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ x86-64

resp_benchmark-0.1.3-pp38-pypy38_pp73-musllinux_1_2_i686.whl (1.4 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ i686

resp_benchmark-0.1.3-pp38-pypy38_pp73-musllinux_1_2_armv7l.whl (1.4 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARMv7l

resp_benchmark-0.1.3-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl (1.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.2+ ARM64

resp_benchmark-0.1.3-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

resp_benchmark-0.1.3-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.3 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

resp_benchmark-0.1.3-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.2 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

resp_benchmark-0.1.3-cp312-none-win_amd64.whl (914.5 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

resp_benchmark-0.1.3-cp312-none-win32.whl (851.3 kB view hashes)

Uploaded CPython 3.12 Windows x86

resp_benchmark-0.1.3-cp312-cp312-musllinux_1_2_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

resp_benchmark-0.1.3-cp312-cp312-musllinux_1_2_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

resp_benchmark-0.1.3-cp312-cp312-musllinux_1_2_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARMv7l

resp_benchmark-0.1.3-cp312-cp312-musllinux_1_2_aarch64.whl (1.3 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

resp_benchmark-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

resp_benchmark-0.1.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.3 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

resp_benchmark-0.1.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.3 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

resp_benchmark-0.1.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

resp_benchmark-0.1.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.1 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

resp_benchmark-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

resp_benchmark-0.1.3-cp312-cp312-macosx_11_0_arm64.whl (1.0 MB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

resp_benchmark-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

resp_benchmark-0.1.3-cp311-none-win_amd64.whl (912.7 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

resp_benchmark-0.1.3-cp311-none-win32.whl (852.1 kB view hashes)

Uploaded CPython 3.11 Windows x86

resp_benchmark-0.1.3-cp311-cp311-musllinux_1_2_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

resp_benchmark-0.1.3-cp311-cp311-musllinux_1_2_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

resp_benchmark-0.1.3-cp311-cp311-musllinux_1_2_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARMv7l

resp_benchmark-0.1.3-cp311-cp311-musllinux_1_2_aarch64.whl (1.3 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

resp_benchmark-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

resp_benchmark-0.1.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.3 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

resp_benchmark-0.1.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.3 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

resp_benchmark-0.1.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

resp_benchmark-0.1.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.1 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

resp_benchmark-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

resp_benchmark-0.1.3-cp311-cp311-macosx_11_0_arm64.whl (1.0 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

resp_benchmark-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

resp_benchmark-0.1.3-cp310-none-win_amd64.whl (914.4 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

resp_benchmark-0.1.3-cp310-none-win32.whl (852.0 kB view hashes)

Uploaded CPython 3.10 Windows x86

resp_benchmark-0.1.3-cp310-cp310-musllinux_1_2_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

resp_benchmark-0.1.3-cp310-cp310-musllinux_1_2_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

resp_benchmark-0.1.3-cp310-cp310-musllinux_1_2_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARMv7l

resp_benchmark-0.1.3-cp310-cp310-musllinux_1_2_aarch64.whl (1.3 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

resp_benchmark-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

resp_benchmark-0.1.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.3 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

resp_benchmark-0.1.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.3 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

resp_benchmark-0.1.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

resp_benchmark-0.1.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

resp_benchmark-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

resp_benchmark-0.1.3-cp310-cp310-macosx_11_0_arm64.whl (1.0 MB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

resp_benchmark-0.1.3-cp39-none-win_amd64.whl (914.9 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

resp_benchmark-0.1.3-cp39-none-win32.whl (852.4 kB view hashes)

Uploaded CPython 3.9 Windows x86

resp_benchmark-0.1.3-cp39-cp39-musllinux_1_2_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

resp_benchmark-0.1.3-cp39-cp39-musllinux_1_2_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

resp_benchmark-0.1.3-cp39-cp39-musllinux_1_2_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARMv7l

resp_benchmark-0.1.3-cp39-cp39-musllinux_1_2_aarch64.whl (1.3 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

resp_benchmark-0.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

resp_benchmark-0.1.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.3 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

resp_benchmark-0.1.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.3 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

resp_benchmark-0.1.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

resp_benchmark-0.1.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

resp_benchmark-0.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

resp_benchmark-0.1.3-cp39-cp39-macosx_11_0_arm64.whl (1.0 MB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

resp_benchmark-0.1.3-cp38-none-win_amd64.whl (915.0 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

resp_benchmark-0.1.3-cp38-none-win32.whl (852.9 kB view hashes)

Uploaded CPython 3.8 Windows x86

resp_benchmark-0.1.3-cp38-cp38-musllinux_1_2_x86_64.whl (1.3 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

resp_benchmark-0.1.3-cp38-cp38-musllinux_1_2_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

resp_benchmark-0.1.3-cp38-cp38-musllinux_1_2_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARMv7l

resp_benchmark-0.1.3-cp38-cp38-musllinux_1_2_aarch64.whl (1.3 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

resp_benchmark-0.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

resp_benchmark-0.1.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.3 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

resp_benchmark-0.1.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.3 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

resp_benchmark-0.1.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (1.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

resp_benchmark-0.1.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

resp_benchmark-0.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page