tile38/vendor/github.com/tidwall/redbench/README.md

97 lines
2.7 KiB
Markdown
Raw Permalink Normal View History

2017-03-31 18:31:33 +03:00
# Redbench
[![GoDoc](https://img.shields.io/badge/api-reference-blue.svg?style=flat-square)](https://godoc.org/github.com/tidwall/redbench)
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
2017-09-30 23:07:39 +03:00
[redis-benchmark](https://redis.io/topics/benchmarks) tool.
The purpose of this library is to provide benchmarking for
2017-03-31 18:31:33 +03:00
[Redcon](https://github.com/tidwall/redcon) compatible servers such as
[Tile38](https://github.com/tidwall/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](http://antirez.com/news/106).
## Getting Started
### Installing
To start using Redbench, install Go and run `go get`:
```sh
$ 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.
```go
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")
})
}
```
2017-09-30 23:07:39 +03:00
Which is similar to executing:
2017-03-31 18:31:33 +03:00
```
$ redis-benchmark -t PING,SET,GET
```
2017-09-30 23:07:39 +03:00
For a more complete example, check out [tile38-benchmark](https://github.com/tidwall/tile38/blob/master/cmd/tile38-benchmark/main.go) from the [Tile38](https://github.com/tidwall/tile38) project.
2017-03-31 18:31:33 +03:00
### Custom Options
```go
type Options struct {
Requests int
Clients int
Pipeline int
Quiet bool
CSV bool
Stdout io.Writer
Stderr io.Writer
}
```
## Contact
Josh Baker [@tidwall](http://twitter.com/tidwall)
## License
Redbench source code is available under the MIT [License](/LICENSE).