天天看點

go Redis 管道(pipeline)運用

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

複制