1
1
package benchmark
2
2
3
3
import (
4
+ "github.com/dgraph-io/ristretto"
4
5
"github.com/lxzan/memorycache"
5
6
"github.com/lxzan/memorycache/internal/utils"
7
+ "sync/atomic"
6
8
"testing"
7
9
"time"
8
10
)
@@ -17,33 +19,70 @@ func init() {
17
19
}
18
20
}
19
21
20
- func BenchmarkSet (b * testing.B ) {
21
- var f = func (n , count int ) {
22
- var mc = memorycache .New (memorycache .WithBucketNum (16 ))
23
- for i := 0 ; i < n ; i ++ {
24
- var key = benchkeys [i % count ]
25
- mc .Set (key , 1 , time .Hour )
22
+ func BenchmarkMemoryCache_Set (b * testing.B ) {
23
+ var mc = memorycache .New (
24
+ memorycache .WithBucketNum (128 ),
25
+ memorycache .WithBucketSize (1000 , 10000 ),
26
+ )
27
+ var i = int64 (0 )
28
+ b .RunParallel (func (pb * testing.PB ) {
29
+ for pb .Next () {
30
+ index := atomic .AddInt64 (& i , 1 ) % benchcount
31
+ mc .Set (benchkeys [index ], 1 , time .Hour )
26
32
}
33
+ })
34
+ }
35
+
36
+ func BenchmarkMemoryCache_Get (b * testing.B ) {
37
+ var mc = memorycache .New (
38
+ memorycache .WithBucketNum (16 ),
39
+ memorycache .WithBucketSize (100 , 1000 ),
40
+ )
41
+ for i := 0 ; i < benchcount ; i ++ {
42
+ mc .Set (benchkeys [i % benchcount ], 1 , time .Hour )
27
43
}
28
44
29
- b .Run ("10000" , func (b * testing.B ) { f (b .N , 10000 ) })
30
- b .Run ("1000000" , func (b * testing.B ) { f (b .N , 1000000 ) })
45
+ var i = int64 (0 )
46
+ b .ResetTimer ()
47
+ b .RunParallel (func (pb * testing.PB ) {
48
+ for pb .Next () {
49
+ index := atomic .AddInt64 (& i , 1 ) % benchcount
50
+ mc .Get (benchkeys [index ])
51
+ }
52
+ })
31
53
}
32
54
33
- func BenchmarkGet (b * testing.B ) {
34
- var f = func (n , count int ) {
35
- var mc = memorycache .New (memorycache .WithBucketNum (16 ))
36
- for i := 0 ; i < count ; i ++ {
37
- var key = benchkeys [i ]
38
- mc .Set (key , 1 , time .Hour )
55
+ func BenchmarkRistretto_Set (b * testing.B ) {
56
+ var mc , _ = ristretto .NewCache (& ristretto.Config {
57
+ NumCounters : 1e7 , // number of keys to track frequency of (10M).
58
+ MaxCost : 1 << 30 , // maximum cost of cache (1GB).
59
+ BufferItems : 64 , // number of keys per Get buffer.
60
+ })
61
+ var i = int64 (0 )
62
+ b .RunParallel (func (pb * testing.PB ) {
63
+ for pb .Next () {
64
+ index := atomic .AddInt64 (& i , 1 ) % benchcount
65
+ mc .SetWithTTL (benchkeys [index ], 1 , 1 , time .Hour )
39
66
}
67
+ })
68
+ }
40
69
41
- for i := 0 ; i < n ; i ++ {
42
- var key = benchkeys [i % count ]
43
- mc .Get (key )
44
- }
70
+ func BenchmarkRistretto_Get (b * testing.B ) {
71
+ var mc , _ = ristretto .NewCache (& ristretto.Config {
72
+ NumCounters : 1e7 , // number of keys to track frequency of (10M).
73
+ MaxCost : 1 << 30 , // maximum cost of cache (1GB).
74
+ BufferItems : 64 , // number of keys per Get buffer.
75
+ })
76
+ for i := 0 ; i < benchcount ; i ++ {
77
+ mc .SetWithTTL (benchkeys [i % benchcount ], 1 , 1 , time .Hour )
45
78
}
46
79
47
- b .Run ("10000" , func (b * testing.B ) { f (b .N , 10000 ) })
48
- b .Run ("1000000" , func (b * testing.B ) { f (b .N , 1000000 ) })
80
+ var i = int64 (0 )
81
+ b .ResetTimer ()
82
+ b .RunParallel (func (pb * testing.PB ) {
83
+ for pb .Next () {
84
+ index := atomic .AddInt64 (& i , 1 ) % benchcount
85
+ mc .Get (benchkeys [index ])
86
+ }
87
+ })
49
88
}
0 commit comments