#171 Redis的Benchmark测试用例, 完整的session性能测试。

This commit is contained in:
Calvin
2013-01-22 18:13:20 +08:00
parent 3ddf7cf7f9
commit 28fcce0501
5 changed files with 26 additions and 29 deletions
@@ -1,7 +1,5 @@
package org.springside.examples.showcase.demos.redis;
import java.util.Date;
import org.springside.modules.test.benchmark.BenchmarkBase;
import org.springside.modules.test.benchmark.BenchmarkTask;
@@ -19,7 +17,6 @@ public class RedisCounterBenchmark extends BenchmarkBase {
private static final int THREAD_COUNT = 20;
private static final long LOOP_COUNT = 50000;
private static final int PRINT_INTERVAL_SECONDS = 10;
private static final int COUNTERS = 1;
private static final String HOST = "localhost";
private static final int PORT = Protocol.DEFAULT_PORT;
@@ -72,13 +69,13 @@ public class RedisCounterBenchmark extends BenchmarkBase {
@Override
public void run() {
Jedis jedis = pool.getResource();
Date startTime = onThreadStart();
onThreadStart();
try {
// start test loop
for (int i = 0; i < loopCount; i++) {
jedis.incr(counterName + (i % COUNTERS));
printInfo(startTime, i);
jedis.incr(counterName);
printInfo(i);
}
} finally {
onThreadFinish();
@@ -1,7 +1,5 @@
package org.springside.examples.showcase.demos.redis;
import java.util.Date;
import org.springside.modules.mapper.JsonMapper;
import org.springside.modules.test.benchmark.BenchmarkBase;
import org.springside.modules.test.benchmark.BenchmarkTask;
@@ -13,7 +11,7 @@ import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Protocol;
/**
* 测试Redis批量插入时的性能, 使用PipeLine加速.
* 测试Redis批é‡�æ�’入时的性能, 使用PipeLine加é?.
*
* @author calvin
*/
@@ -75,7 +73,7 @@ public class RedisMassInsertion extends BenchmarkBase {
@Override
public void run() {
Jedis jedis = pool.getResource();
Date startTime = onThreadStart();
onThreadStart();
try {
Pipeline pl = jedis.pipelined();
@@ -94,7 +92,7 @@ public class RedisMassInsertion extends BenchmarkBase {
if (i % BATCH_SIZE == 0) {
pl.sync();
printInfo(startTime, i);
printInfo(i);
}
}
} finally {
@@ -1,7 +1,5 @@
package org.springside.examples.showcase.demos.redis;
import java.util.Date;
import org.springside.modules.mapper.JsonMapper;
import org.springside.modules.test.benchmark.BenchmarkBase;
import org.springside.modules.test.benchmark.BenchmarkTask;
@@ -12,7 +10,7 @@ import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Protocol;
/**
* 测试Redis用于做Session管理的setEx()与get()方法的性能, 并使用JSON格式存储数据.
* 测试Redis用于å�šSession管ç�†çš„setEx()与get()方法的æ?èƒ? 并使用JSONæ ¼å¼�存储数æ�®.
*
* @author calvin
*/
@@ -72,7 +70,7 @@ public class RedisSessionBenchmark extends BenchmarkBase {
@Override
public void run() {
Jedis jedis = pool.getResource();
Date startTime = onThreadStart();
onThreadStart();
try {
@@ -88,7 +86,7 @@ public class RedisSessionBenchmark extends BenchmarkBase {
//get it back
String sessionBackString = jedis.get(keyPrefix + i);
Session sessionBack = jsonMapper.fromJson(sessionBackString, Session.class);
printInfo(startTime, i);
printInfo(i);
}
} finally {
onThreadFinish();
@@ -37,7 +37,8 @@ public abstract class BenchmarkBase {
//print start message
String className = this.getClass().getSimpleName();
long invokeTimes = threadCount * loopCount;
System.out.printf("%s start. %,d request will be invoked.\n", className, invokeTimes);
System.out.printf("%s start.%d threads with %,d loops, totally %,d requests will be invoked.\n", className,
threadCount, loopCount, invokeTimes);
Date startTime = new Date();
//wait for all threads finish
@@ -45,9 +46,10 @@ public abstract class BenchmarkBase {
//print summary message
long timeInMills = new Date().getTime() - startTime.getTime();
long tps = invokeTimes * 1000 / timeInMills;
System.out.printf("%s finish.\nThread count is %d, spend %,d ms for %,d request, TPS is %,d.\n", className,
threadCount, timeInMills, invokeTimes, (invokeTimes * 1000 / timeInMills));
System.out.printf("%s finish.\n%d thread spend %,d ms for %,d requests, TPS is %,d.\n", className,
threadCount, timeInMills, invokeTimes, tps);
} finally {
threadPool.shutdownNow();
onFinish();
@@ -9,6 +9,8 @@ public abstract class BenchmarkTask implements Runnable {
protected int threadIndex;
protected Date startTime;
protected RateLimiter rateLimiter;
protected int printInfoInterval; //��为秒.
protected long previous = 0L;
@@ -26,7 +28,7 @@ public abstract class BenchmarkTask implements Runnable {
/**
* Must be invoked after each thread finish the prepare job, return the startTime.
*/
protected Date onThreadStart() {
protected void onThreadStart() {
parent.startLock.countDown();
//wait for all other threads ready
try {
@@ -34,7 +36,7 @@ public abstract class BenchmarkTask implements Runnable {
} catch (InterruptedException e) {
e.printStackTrace();
}
return new Date();
startTime = new Date();
}
/**
@@ -47,21 +49,21 @@ public abstract class BenchmarkTask implements Runnable {
}
/**
* 间隔printInfoInterval的时间打印信息.
* 间隔printInfoInterval的时间打�信�
*/
protected void printInfo(Date startTime, long last) {
protected void printInfo(int current) {
if (rateLimiter.tryAcquire()) {
long totalTime = (new Date().getTime() - startTime.getTime()) / 1000;
long requests = (last - previous) + 1;
long requests = (current - previous) + 1;
long tps = requests / printInfoInterval;
BigDecimal latency = new BigDecimal(printInfoInterval * 1000).divide(new BigDecimal(requests), 2,
BigDecimal.ROUND_HALF_UP);
String latency = new BigDecimal(printInfoInterval * 1000).divide(new BigDecimal(requests), 2,
BigDecimal.ROUND_HALF_UP).toString();
System.out.printf(
"Thread %02d finish %,d request after %d seconds. Last TPS is %,d. Last latency is %sms.\n",
threadIndex, last, totalTime, tps, latency.toString());
previous = last;
"Thread %02d finish %,d requests after %d seconds. Last TPS is %,d and latency is %sms.\n",
threadIndex, current, totalTime, tps, latency);
previous = current;
}
}
}