redis压测

This commit is contained in:
zhaocy 2022-07-20 21:13:26 +08:00
parent fc38b7f4ca
commit c27d8c456c
2 changed files with 91 additions and 11 deletions

View File

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

View File

@ -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
},
},
}