Redis在进行大批量操作时,为了提高运行效率,往往会采用pipe,今天实测对比了一下管道的运行效率,还是挺惊人的.
package main
import (
"flag"
"fmt"
"github.com/go-redis/redis/v8"
"context"
"time"
)
func main() {
var pipucot int = 1
flag.IntVar(&pipucot, "pc", 1000, "pip批量处理个数")
flag.Parse()
rdb := redis.NewClient(&redis.Options{
Addr:"192.168.1.101:6379",
})
ctx := context.Background()
pip := rdb.Pipeline()
t := time.Now()
cmdcot := 100000
for k:=1;k<cmdcot;k++{
key:= fmt.Sprint("keypip%d", k)
err := pip.Set(ctx, key, k, 0).Err()
if err != nil {
panic(err)
}
if k%pipucot==0{
pip.Exec(ctx)
}
}
println("pip use time:", time.Since(t).Milliseconds())
t1 := time.Now()
for k:=1;k<cmdcot;k++{
key:= fmt.Sprint("key%d", k)
err := rdb.Set(ctx, key, k, 0).Err()
if err != nil {
panic(err)
}
}
println("no pip use time:", time.Since(t1).Milliseconds())
}
运行结果如下: