package bench import ( "context" "fmt" "go_dreamfactory/sys/cache" "os" "testing" "github.com/go-redis/redis/v8" ) 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 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: "pipeline", Make: func(bench Benchmark) (Target, error) { 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: "lua", Make: func(bench Benchmark) (Target, error) { return Target{ Get: func() { if _, err := cache.Redis().EvalSha(context.Background(), res, keys).Result(); err != nil { fmt.Println(err) } else { // fmt.Println(v) } }, }, nil }, }, } ) RunBenchmark(b, compose(parallelisms, dataSizes, numKeys, builders)) }