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  }