-
-
Save alphazero/522177 to your computer and use it in GitHub Desktop.
| /* | |
| * Copyright 2010 Joubin Houshyar | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package org.jredis.ri.alphazero.bench; | |
| import java.io.Serializable; | |
| import org.jredis.JRedis; | |
| import org.jredis.RedisException; | |
| import org.jredis.bench.Util.Timer; | |
| import org.jredis.connector.ConnectionSpec; | |
| import org.jredis.ri.alphazero.JRedisClient; | |
| import org.jredis.ri.alphazero.connection.DefaultConnectionSpec; | |
| /** | |
| * [TODO: document me!] | |
| * | |
| * @author joubin ([email protected]) | |
| * @date Aug 12, 2010 | |
| * | |
| */ | |
| public class JRedisClientContinuousOpBenchmark { | |
| public static void main (String[] args) { | |
| new JRedisClientContinuousOpBenchmark().run(); | |
| } | |
| public void run() { | |
| int reps = 1000; | |
| ConnectionSpec spec = DefaultConnectionSpec.newSpec() | |
| .setCredentials("jredis".getBytes()) | |
| .setDatabase(13); // << we will flush this db | |
| JRedis jredis = new JRedisClient(spec); | |
| try { | |
| jredis.flushdb(); | |
| for(;;) benchOp(jredis, reps); | |
| } | |
| catch (RedisException e) { | |
| e.printStackTrace(); | |
| } | |
| } | |
| private void benchOp(JRedis jredis, int reps){ | |
| Timer timer = Timer.startNewTimer(); | |
| String key = "baby!"; | |
| try { | |
| for(int i=0; i<reps; i++) { | |
| Woof woof = new Woof(); | |
| jredis.set(key+woof.timestamp, woof); | |
| } | |
| } | |
| catch (RedisException e) { | |
| e.printStackTrace(); | |
| } | |
| finally { | |
| timer.mark(); | |
| System.out.format("delta: %d - keys: %09d \n", timer.deltaAtMark(), keyCnt(jredis)); | |
| } | |
| } | |
| private long keyCnt (JRedis jRedis) { | |
| try { | |
| return jRedis.dbsize(); | |
| } | |
| catch (RedisException e) { | |
| throw new RuntimeException("", e); | |
| } | |
| } | |
| @SuppressWarnings("serial") | |
| public static class Woof implements Serializable { | |
| public final long timestamp = System.currentTimeMillis(); | |
| } | |
| } |
Btw, the above output is with append log on. With default settings, the performance is considerably better (and o/c still O(1)):
elta: 117 - keys: 000002447
delta: 118 - keys: 000002566
delta: 119 - keys: 000002686
delta: 119 - keys: 000002805
delta: 112 - keys: 000002917
delta: 127 - keys: 000003041
delta: 117 - keys: 000003158
delta: 115 - keys: 000003273
delta: 116 - keys: 000003389
delta: 115 - keys: 000003503
delta: 113 - keys: 000003617
delta: 113 - keys: 000003730
delta: 113 - keys: 000003844
delta: 131 - keys: 000003974
...
delta: 115 - keys: 000024042
delta: 115 - keys: 000024157
delta: 115 - keys: 000024270
delta: 113 - keys: 000024384
delta: 116 - keys: 000024501
delta: 116 - keys: 000024617
delta: 117 - keys: 000024733
...
delta: 117 - keys: 000042733
delta: 115 - keys: 000042847
delta: 117 - keys: 000042964
delta: 119 - keys: 000043081
delta: 115 - keys: 000043197
delta: 118 - keys: 000043315
delta: 114 - keys: 000043429
delta: 120 - keys: 000043547
delta: 118 - keys: 000043666
delta: 118 - keys: 000043784
...
elta: 119 - keys: 000091534
delta: 115 - keys: 000091649
delta: 115 - keys: 000091765
delta: 116 - keys: 000091880
delta: 115 - keys: 000091996
delta: 117 - keys: 000092111
delta: 117 - keys: 000092228
delta: 114 - keys: 000092343
delta: 117 - keys: 000092459
delta: 115 - keys: 000092574
...
delta: 116 - keys: 000112310
delta: 113 - keys: 000112424
delta: 114 - keys: 000112538
delta: 115 - keys: 000112653
delta: 114 - keys: 000112767
delta: 116 - keys: 000112884
...
delta: 119 - keys: 000132149
delta: 119 - keys: 000132268
delta: 114 - keys: 000132382
delta: 116 - keys: 000132499
delta: 115 - keys: 000132615
MBP OSX 10.5 Java 6 localhost
output of the bench -- deltas consistently in 600-700 range.
delta: 740 - keys: 000000685
delta: 720 - keys: 000001353
delta: 660 - keys: 000002010
delta: 659 - keys: 000002668
delta: 658 - keys: 000003323
delta: 689 - keys: 000003990
delta: 656 - keys: 000004643
delta: 640 - keys: 000005282
delta: 645 - keys: 000005925
delta: 674 - keys: 000006576
...
delta: 653 - keys: 000087620
delta: 661 - keys: 000088278
delta: 658 - keys: 000088933
delta: 680 - keys: 000089591
delta: 647 - keys: 000090236
...
delta: 660 - keys: 000934533
delta: 660 - keys: 000935190
delta: 662 - keys: 000935852
delta: 740 - keys: 000000685
delta: 720 - keys: 000001353
delta: 660 - keys: 000002010
delta: 659 - keys: 000002668
delta: 658 - keys: 000003323
delta: 689 - keys: 000003990
delta: 656 - keys: 000004643
delta: 640 - keys: 000005282
delta: 645 - keys: 000005925
delta: 674 - keys: 000006576
...
delta: 658 - keys: 000988125
delta: 651 - keys: 000988775
delta: 649 - keys: 000989424
...
delta: 658 - keys: 001035518
delta: 728 - keys: 001036164
delta: 649 - keys: 001036810
...
delta: 682 - keys: 001054456
delta: 652 - keys: 001055106
delta: 649 - keys: 001055754
delta: 835 - keys: 001056454
...
delta: 648 - keys: 001072558
delta: 655 - keys: 001073212
delta: 733 - keys: 001073863
delta: 662 - keys: 001074520
...