redbench

Benchmarking for custom Redis commands and modules

Github stars Tracking Chart

Redbench

GoDoc

Redbench is a Go package that allows for bootstrapping benchmarks
for servers using a custom implementation of the Redis protocol. It provides
the same inputs and outputs as the
redis-benchmark tool.

The purpose of this library is to provide benchmarking for
Redcon compatible servers such as
Tile38, but also works well for Redis
operations that are not covered by the redis-benchmark tool such as the
GEO* commands, custom lua scripts, or Redis Modules.

Getting Started

Installing

To start using Redbench, install Go and run go get:

$ go get -u github.com/tidwall/redbench

This will retrieve the library.

Example

The following example will run a benchmark for the PING,SET,GET,GEOADD,GEORADIUS
commands on a server at 127.0.0.1:6379.

package main

import (
	"math/rand"
	"strconv"
	"time"

	"github.com/tidwall/redbench"
)

func main() {
	redbench.Bench("PING", "127.0.0.1:6379", nil, nil, func(buf []byte) []byte {
		return redbench.AppendCommand(buf, "PING")
	})
	redbench.Bench("SET", "127.0.0.1:6379", nil, nil, func(buf []byte) []byte {
		return redbench.AppendCommand(buf, "SET", "key:string", "val")
	})
	redbench.Bench("GET", "127.0.0.1:6379", nil, nil, func(buf []byte) []byte {
		return redbench.AppendCommand(buf, "GET", "key:string")
	})
	rand.Seed(time.Now().UnixNano())
	redbench.Bench("GEOADD", "127.0.0.1:6379", nil, nil, func(buf []byte) []byte {
		return redbench.AppendCommand(buf, "GEOADD", "key:geo",
			strconv.FormatFloat(rand.Float64()*360-180, 'f', 7, 64),
			strconv.FormatFloat(rand.Float64()*170-85, 'f', 7, 64),
			strconv.Itoa(rand.Int()))
	})
	redbench.Bench("GEORADIUS", "127.0.0.1:6379", nil, nil, func(buf []byte) []byte {
		return redbench.AppendCommand(buf, "GEORADIUS", "key:geo",
			strconv.FormatFloat(rand.Float64()*360-180, 'f', 7, 64),
			strconv.FormatFloat(rand.Float64()*170-85, 'f', 7, 64),
			"10", "km")
	})
}

Which is similar to executing:

$ redis-benchmark -t PING,SET,GET

For a more complete example, check out tile38-benchmark from the Tile38 project.

Custom Options

type Options struct {
	Requests int
	Clients  int
	Pipeline int
	Quiet    bool
	CSV      bool
	Stdout   io.Writer
	Stderr   io.Writer
}

Contact

Josh Baker @tidwall

License

Redbench source code is available under the MIT License.

Main metrics

Overview
Name With Ownertidwall/redbench
Primary LanguageGo
Program languageGo (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2017-03-31 15:23:01
Pushed At2021-01-25 22:06:56
Last Commit At2018-11-10 10:37:44
Release Count1
Last Release Namev0.1.0 (Posted on )
First Release Namev0.1.0 (Posted on )
用户参与
Stargazers Count33
Watchers Count3
Fork Count9
Commits Count5
Has Issues Enabled
Issues Count0
Issue Open Count0
Pull Requests Count0
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private