commands: reduce memory allocations in ZAdd.

This commit is contained in:
Adrien Bustany 2015-05-11 15:41:42 +02:00 committed by Vladimir Mihailenco
parent bbfbc5f668
commit 5f85be3173
2 changed files with 23 additions and 3 deletions

View File

@ -858,9 +858,12 @@ type ZStore struct {
} }
func (c *commandable) ZAdd(key string, members ...Z) *IntCmd { func (c *commandable) ZAdd(key string, members ...Z) *IntCmd {
args := []string{"ZADD", key} args := make([]string, 2+2*len(members))
for _, m := range members { args[0] = "ZADD"
args = append(args, formatFloat(m.Score), m.Member) 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...) cmd := NewIntCmd(args...)
c.Process(cmd) c.Process(cmd)

View File

@ -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)
}
}
})
}