diff --git a/commands.go b/commands.go index b6df30cf..dc68bea1 100644 --- a/commands.go +++ b/commands.go @@ -858,9 +858,12 @@ type ZStore struct { } func (c *commandable) ZAdd(key string, members ...Z) *IntCmd { - args := []string{"ZADD", key} - for _, m := range members { - args = append(args, formatFloat(m.Score), m.Member) + args := make([]string, 2+2*len(members)) + args[0] = "ZADD" + args[1] = key + for i, m := range members { + args[2+2*i] = formatFloat(m.Score) + args[2+2*i+1] = m.Member } cmd := NewIntCmd(args...) c.Process(cmd) diff --git a/redis_test.go b/redis_test.go index 94579185..5fb6d65a 100644 --- a/redis_test.go +++ b/redis_test.go @@ -267,3 +267,20 @@ func BenchmarkPipeline(b *testing.B) { } }) } + +func BenchmarkZAdd(b *testing.B) { + client := redis.NewClient(&redis.Options{ + Addr: redisAddr, + }) + defer client.Close() + + b.ResetTimer() + + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + if err := client.ZAdd("key", redis.Z{float64(1), "hello"}).Err(); err != nil { + b.Fatal(err) + } + } + }) +}