github.com/teng231/smartcache@v1.1.1/engine_bench_test.go (about) 1 package smartcache 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 "sync" 8 "testing" 9 "time" 10 ) 11 12 func BenchmarkEngineCacheWrite(b *testing.B) { 13 e := Start() 14 var benchmarks = []struct { 15 input int 16 }{ 17 {input: 100}, 18 {input: 1000}, 19 {input: 74382}, 20 } 21 22 for _, bm := range benchmarks { 23 err := e.AddCollection( 24 &CollectionConfig{ 25 Key: fmt.Sprintf("casetest_%d", bm.input), 26 Capacity: 100000, 27 ExpireDuration: 10 * time.Second, 28 }, 29 ) 30 if err != nil { 31 log.Print(err) 32 } 33 ctx := context.TODO() 34 b.Run(fmt.Sprintf("input_size_%d", bm.input), func(b *testing.B) { 35 for i := 0; i < bm.input; i++ { 36 if err := e.Select(ctx, fmt.Sprintf("casetest_%d", bm.input)).Upsert(i, fmt.Sprintf("value %d", i)); err != nil { 37 log.Print(err) 38 } 39 } 40 }) 41 } 42 43 } 44 45 func BenchmarkEngineCachex100000W10g(b *testing.B) { 46 e := Start() 47 e.AddCollection( 48 &CollectionConfig{ 49 Key: "bench100000w10g", 50 Capacity: 100000, 51 ExpireDuration: 10 * time.Second, 52 }, 53 ) 54 buf := make(chan int, 100000) 55 wg := &sync.WaitGroup{} 56 for i := 0; i < 10000; i++ { 57 buf <- i 58 wg.Add(1) 59 } 60 ctx := context.TODO() 61 62 for i := 0; i < 10; i++ { 63 go func() { 64 for { 65 ivalue := <-buf 66 if err := e.Select(ctx, "bench100000w10g").Upsert(ivalue, fmt.Sprintf("value %d", ivalue)); err != nil { 67 log.Print(err) 68 } 69 if ivalue%3 == 0 { 70 var k string 71 hit, _ := e.Select(ctx, "bench100000w10g").Get(ivalue, nil).Exec(&k) 72 if !hit { 73 b.Fail() 74 } 75 if k != fmt.Sprintf("value %d", ivalue) { 76 b.Fail() 77 } 78 } 79 wg.Done() 80 } 81 }() 82 } 83 wg.Wait() 84 }