diff --git a/cmd/bench/base.go b/cmd/bench/base.go index 37bd83a3c..ff3ccda37 100644 --- a/cmd/bench/base.go +++ b/cmd/bench/base.go @@ -7,6 +7,8 @@ import ( type Target struct { //这里定义需要测试的方法 + Set func() + Get func() } //测试基准 @@ -46,15 +48,15 @@ func RunBenchmark(b *testing.B, benchmarks []Benchmark) { for _, bench := range benchmarks { bench := bench b.Run(fmt.Sprintf("%s-parallelism(%d)- ", bench.TargetBuilder.Name, bench.Parallelism), func(b *testing.B) { - // target, err := bench.TargetBuilder.Make(bench) - // if err != nil { - // b.Fatalf("%s setup fail: %v", bench.TargetBuilder.Name, err) - // } + target, err := bench.TargetBuilder.Make(bench) + if err != nil { + b.Fatalf("%s setup fail: %v", bench.TargetBuilder.Name, err) + } if bench.Parallelism == 0 { b.ResetTimer() for i := 0; i < b.N; i++ { //执行测试方法 - + target.Get() } } else { @@ -63,6 +65,7 @@ func RunBenchmark(b *testing.B, benchmarks []Benchmark) { b.RunParallel(func(pb *testing.PB) { //并行执行 for pb.Next() { //执行测试方法 + target.Get() } }) } diff --git a/cmd/bench/main_test.go b/cmd/bench/main_test.go index 076576295..42bd6be09 100644 --- a/cmd/bench/main_test.go +++ b/cmd/bench/main_test.go @@ -1,27 +1,104 @@ package bench import ( + "context" + "fmt" + "go_dreamfactory/sys/cache" + "os" "testing" + + "github.com/go-redis/redis/v8" ) -func BenchmarkMarsh(b *testing.B) { +var LusScriptgetList = ` +local data = {} +local n = 1 +for i, v in ipairs(KEYS) do + if i%2 == 0 then + data[n] = redis.call("HGETALL", v) + n = n+1 + end +end +return data +` +var res string + +func TestMain(m *testing.M) { + if err := cache.OnInit(nil, cache.Set_Redis_Addr([]string{ + "10.0.0.9:6986", + // "10.0.0.9:9001", "10.0.0.9:9002", "10.0.0.9:9003", "10.0.1.45:9004", "10.0.1.45:9005", "10.0.1.45:9006", + }), + // cache.Set_Redis_Password(""), + cache.Set_Redis_Password("li13451234"), + cache.Set_Redis_DB(9), + cache.Set_Redis_IsCluster(false)); err != nil { + fmt.Printf("err:%v\n", err) + return + } + var err error + + res, err = cache.Redis().NewScript(LusScriptgetList).Result() + if err != nil { + fmt.Println("err:", err) + } + defer os.Exit(m.Run()) +} +func BenchmarkRedis(b *testing.B) { var ( // ncpu = runtime.NumCPU() parallelisms = []int{4, 16, 64} dataSizes = []int{100, 1000, 10000} numKeys = 1024 - builders = []TargetBuilder{ + keys = []string{ + "hero:0_62d6131a3a719b898a90b5fb-62d6131a3a719b898a90b5fe", + "hero:0_62d6131a3a719b898a90b5fb-62d6131a3a719b898a90b600", + "hero:0_62d6131a3a719b898a90b5fb-62d661d6bca6eab554879fc6", + "hero:0_62d6131a3a719b898a90b5fb-62d6694dbca6eab554879fef", + // "hero:0_62bbf14cf88fbd265e61a121-62bbf1849d64e5ee7ff12529", + // "hero:0_62bbf364f88fbd265e61a122-62bbf5189b1970ed6b28b638", + // "hero:0_62bbf364f88fbd265e61a122-62bbf5189b1970ed6b28b63e", + // "hero:0_62bbf57346a32c12466c2e64-62bbf58d9b1970ed6b28b643", + } + // keys2 = []string{ + // "hero:0_62bbf14cf88fbd265e61a121-62bbf1849d64e5ee7ff12529{yes}", + // "hero:0_62bbf364f88fbd265e61a122-62bbf5189b1970ed6b28b638{yes}", + // "hero:0_62bbf364f88fbd265e61a122-62bbf5189b1970ed6b28b63e{yes}", + // "hero:0_62bbf57346a32c12466c2e64-62bbf58d9b1970ed6b28b643{yes}", + // } + builders = []TargetBuilder{ { - Name: "测试名1", + Name: "pipeline", Make: func(bench Benchmark) (Target, error) { - return Target{}, nil + return Target{ + Get: func() { + for _, v := range keys { + ctx := context.Background() + cache.Redis().Pipeline(ctx, func(pipe redis.Pipeliner) error { + pipe.HGetAll(ctx, v) + _, err := pipe.Exec(ctx) + // fmt.Println(v) + return err + }) + } + }, + }, nil }, }, { - Name: "测试名2", + Name: "lua", Make: func(bench Benchmark) (Target, error) { - return Target{}, nil + return Target{ + Get: func() { + + if _, err := cache.Redis().EvalSha(context.Background(), res, keys).Result(); err != nil { + fmt.Println(err) + } else { + // fmt.Println(v) + } + + }, + }, nil }, }, }