go_dreamfactory/cmd/bench/main_test.go
2022-07-20 21:14:19 +08:00

109 lines
2.7 KiB
Go

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