1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package main
- import (
- "context"
- "fmt"
- "log"
- "os"
- "time"
- "github.com/go-redis/redis/v8"
- "github.com/pborman/getopt/v2"
- )
- var ctx = context.Background()
- func main() {
- helpFlag := getopt.BoolLong("help", 'h', "display help")
- redisHost := getopt.StringLong("host", 's', "", "name or IP of any cluster node")
- redisPort := getopt.IntLong("port", 'p', 6379, "port for the cluster node")
- redisPassword := getopt.StringLong("password", 'a', "", "cluster password")
- messageCount := getopt.IntLong("message-count", 'm', 10000, "Message count")
- minBackOff := getopt.IntLong("min-backoff", 'i', 500, "ms to start backoff")
- maxBackOff := getopt.IntLong("max-backoff", 'x', 1000, "ms to start backoff")
- getopt.Parse()
- if *helpFlag || *redisHost == "" {
- getopt.PrintUsage(os.Stderr)
- os.Exit(1)
- }
- client := redis.NewClusterClient(&redis.ClusterOptions{
- Addrs: []string{fmt.Sprintf("%s:%d", *redisHost, *redisPort)},
- MaxRedirects: 3,
- Password: *redisPassword,
- PoolSize: 8,
- MinRetryBackoff: time.Duration(*minBackOff) * time.Millisecond,
- MaxRetryBackoff: time.Duration(*maxBackOff) * time.Millisecond,
- MinIdleConns: 5,
- PoolTimeout: 0,
- ReadTimeout: 4 * time.Millisecond,
- WriteTimeout: 4 * time.Millisecond,
- IdleTimeout: 20 * time.Second,
- DialTimeout: 2 * time.Second,
- })
- client.Ping(ctx)
- for i := 0; i < *messageCount; i++ {
- start := time.Now()
- misses := client.PoolStats().Misses
- _, err := client.Set(ctx, "DTM", "DTM", 0).Result()
- elapsed := time.Since(start)
- if err != nil {
- fmt.Println(err)
- }
- if client.PoolStats().Misses > misses && elapsed.Milliseconds() > 1 {
- log.Printf("Failover: Client took %d ms to complete operation %+v\n", elapsed.Milliseconds(), client.PoolStats())
- }
- }
- }
|