go_dreamfactory/cmd/bench/main_test.go
2022-08-10 13:38:11 +08:00

111 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 key = tostring(KEYS[1])
local keyss = redis.call("HGETALL", key)
local data = {}
local n = 1
for i, v in ipairs(keyss) 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.0.9:9004", "10.0.0.9:9005", "10.0.0.9:9006",
}),
cache.Set_Redis_Password(""),
// cache.Set_Redis_Password("li13451234"),
// cache.Set_Redis_DB(0),
cache.Set_Redis_IsCluster(true)); 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) {
uid := "2_62ec8ab8828fb7bf67b220b6"
heroRedisKey := fmt.Sprintf("hero_%s%s", uid, "{herotest}")
var (
// ncpu = runtime.NumCPU()
parallelisms = []int{4, 16, 64}
dataSizes = []int{100, 1000, 10000}
numKeys = 1024
key = heroRedisKey
// 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",
// }
builders = []TargetBuilder{
{
Name: "pipeline",
Make: func(bench Benchmark) (Target, error) {
return Target{
Get: func() {
ctx := context.Background()
keys, _ := cache.Redis().HGetAllToMapString(key)
// fmt.Println(keys)
for _, v := range keys {
cache.Redis().Pipelined(ctx, func(pipe redis.Pipeliner) error {
pipe.HGetAll(ctx, v).Result()
_, 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, []string{key}).Result(); err != nil {
fmt.Println(err)
} else {
// fmt.Println(v)
}
},
}, nil
},
},
}
)
RunBenchmark(b, compose(parallelisms, dataSizes, numKeys, builders))
}