1
1
use strict;
2
2
use warnings FATAL => ' all' ;
3
+ use feature qw/ say/ ;
4
+ use lib " ." ;
5
+ use lib " ./_build/lib" ;
6
+ use lib " ./blib/arch" ;
7
+ use lib " ./blib/lib" ;
3
8
use lib ' ./xt/lib' ;
4
- use Benchmark;
9
+
10
+ use Time::HiRes qw/ gettimeofday tv_interval/ ;
5
11
use Redis::Cluster::Fast;
6
12
use Redis::ClusterRider;
7
- use Test::More; # for Test::RedisCluster
8
- use Test::Docker::RedisCluster qw/ get_startup_nodes/ ;
9
-
10
- print " Redis::Cluster::Fast is " . $Redis::Cluster::Fast::VERSION . " \n " ;
11
- print " Redis::ClusterRider is " . $Redis::ClusterRider::VERSION . " \n " ;
12
13
13
- my $nodes = get_startup_nodes;
14
+ my $nodes_str = $ENV {REDIS_NODES };
15
+ my $nodes = [
16
+ split (/ ,/ , $nodes_str )
17
+ ];
14
18
15
19
my $xs = Redis::Cluster::Fast-> new(
16
20
startup_nodes => $nodes ,
21
+ route_use_slots => 1,
17
22
);
18
23
19
24
my $pp = Redis::ClusterRider-> new(
20
25
startup_nodes => $nodes ,
21
26
);
22
27
23
- my $cc = 0;
24
- my $dd = 0;
25
-
26
28
my $loop = 100000;
27
- print " ### mset ###\n " ;
28
- Benchmark::cmpthese($loop , {
29
- " Redis::ClusterRider" => sub {
30
- $cc ++;
31
- $pp -> mset(" {pp$cc }atest" , $cc , " {pp$cc }btest" , $cc , " {pp$cc }ctest" , $cc );
32
- },
33
- " Redis::Cluster::Fast" => sub {
34
- $dd ++;
35
- $xs -> mset(" {xs$dd }atest" , $dd , " {xs$dd }btest" , $dd , " {xs$dd }ctest" , $dd );
36
- },
37
- });
38
-
39
- $cc = 0;
40
- $dd = 0;
41
-
42
- print " ### mget ###\n " ;
43
- Benchmark::cmpthese($loop , {
44
- " Redis::ClusterRider" => sub {
45
- $cc ++;
46
- $pp -> mget(" {pp$cc }atest" , " {pp$cc }btest" , " {pp$cc }ctest" );
47
- },
48
- " Redis::Cluster::Fast" => sub {
49
- $dd ++;
50
- $xs -> mget(" {xs$dd }atest" , " {xs$dd }btest" , " {xs$dd }ctest" );
51
- },
52
- });
53
-
54
- print " ### incr ###\n " ;
55
- Benchmark::cmpthese(-2, {
56
- " Redis::ClusterRider" => sub {
57
- $pp -> incr(" incr_1" );
58
- },
59
- " Redis::Cluster::Fast" => sub {
60
- $xs -> incr(" incr_2" );
61
- },
62
- });
63
-
64
- print " ### new and ping ###\n " ;
65
- Benchmark::cmpthese(-2, {
66
- " Redis::ClusterRider" => sub {
67
- my $tmp = Redis::ClusterRider-> new(
68
- startup_nodes => $nodes ,
69
- );
70
- $tmp -> ping;
71
- },
72
- " Redis::Cluster::Fast" => sub {
73
- my $tmp = Redis::Cluster::Fast-> new(
74
- startup_nodes => $nodes ,
75
- );
76
- $tmp -> ping;
77
- },
78
- });
79
-
80
- is 1, 1;
81
- done_testing;
82
- __END__
83
- % AUTHOR_TESTING=1 perl ./examples/benchmark-simple.pl
84
- Redis::Cluster::Fast is 0.084
85
- Redis::ClusterRider is 0.26
86
- ### mset ###
87
- Rate Redis::ClusterRider Redis::Cluster::Fast
88
- Redis::ClusterRider 13245/s -- -34%
89
- Redis::Cluster::Fast 20080/s 52% --
90
- ### mget ###
91
- Rate Redis::ClusterRider Redis::Cluster::Fast
92
- Redis::ClusterRider 14641/s -- -40%
93
- Redis::Cluster::Fast 24510/s 67% --
94
- ### incr ###
95
- Rate Redis::ClusterRider Redis::Cluster::Fast
96
- Redis::ClusterRider 18367/s -- -44%
97
- Redis::Cluster::Fast 32879/s 79% --
98
- ### new and ping ###
99
- Rate Redis::ClusterRider Redis::Cluster::Fast
100
- Redis::ClusterRider 146/s -- -96%
101
- Redis::Cluster::Fast 3941/s 2598% --
102
- ok 1
103
- 1..1
29
+
30
+ # #####
31
+ # set
32
+ # #####
33
+ sleep 1;
34
+ for my $num (1 .. $loop ) {
35
+ my $start_time = [ gettimeofday ];
36
+
37
+ $xs -> set(' 1' . $num , 123);
38
+
39
+ my $elapsed_time = tv_interval($start_time );
40
+ printf " set_xs,%.10f\n " , $elapsed_time * 1000;
41
+ }
42
+ sleep 1;
43
+ for my $num (1 .. $loop ) {
44
+ my $start_time = [ gettimeofday ];
45
+
46
+ $xs -> set(' 2' . $num , 123, sub {});
47
+ $xs -> run_event_loop;
48
+
49
+ my $elapsed_time = tv_interval($start_time );
50
+ printf " set_xs_pipeline,%.10f\n " , $elapsed_time * 1000;
51
+ }
52
+ sleep 1;
53
+ for my $num (1 .. $loop ) {
54
+ my $start_time = [ gettimeofday ];
55
+
56
+ $xs -> set(' 3' . $num , 123, sub {});
57
+ $xs -> run_event_loop if $num % 100 == 0;
58
+
59
+ my $elapsed_time = tv_interval($start_time );
60
+ printf " set_xs_pipeline_batched_100,%.10f\n " , $elapsed_time * 1000;
61
+ }
62
+ sleep 1;
63
+ for my $num (1 .. $loop ) {
64
+ my $start_time = [ gettimeofday ];
65
+
66
+ $pp -> set(' 4' . $num , 123);
67
+
68
+ my $elapsed_time = tv_interval($start_time );
69
+ printf " set_pp,%.10f\n " , $elapsed_time * 1000;
70
+ }
71
+
72
+ # #####
73
+ # get
74
+ # #####
75
+ sleep 1;
76
+ for my $num (1 .. $loop ) {
77
+ my $start_time = [ gettimeofday ];
78
+
79
+ $xs -> get(' 1' . $num );
80
+
81
+ my $elapsed_time = tv_interval($start_time );
82
+ printf " get_xs,%.10f\n " , $elapsed_time * 1000;
83
+ }
84
+ sleep 1;
85
+ for my $num (1 .. $loop ) {
86
+ my $start_time = [ gettimeofday ];
87
+
88
+ $xs -> get(' 2' . $num , sub {});
89
+ $xs -> run_event_loop;
90
+
91
+ my $elapsed_time = tv_interval($start_time );
92
+ printf " get_xs_pipeline,%.10f\n " , $elapsed_time * 1000;
93
+ }
94
+ sleep 1;
95
+ for my $num (1 .. $loop ) {
96
+ my $start_time = [ gettimeofday ];
97
+
98
+ $xs -> get(' 3' . $num , sub {});
99
+ $xs -> run_event_loop if $num % 100 == 0;
100
+
101
+ my $elapsed_time = tv_interval($start_time );
102
+ printf " get_xs_pipeline_batched_100,%.10f\n " , $elapsed_time * 1000;
103
+ }
104
+ sleep 1;
105
+ for my $num (1 .. $loop ) {
106
+ my $start_time = [ gettimeofday ];
107
+
108
+ $pp -> get(' 4' . $num );
109
+
110
+ my $elapsed_time = tv_interval($start_time );
111
+ printf " get_pp,%.10f\n " , $elapsed_time * 1000;
112
+ }
113
+
114
+ __END__
0 commit comments