私は非常に奇妙な問題に直面しています.redisを使用すると、書き込み速度が非常に遅くなります(理想的な世界では、書き込み速度はRAMの書き込み速度に近づく必要があります)。
これが私のベンチマークです:
package redisbenchmark;
import redis.clients.jedis.Jedis;
public class RedisBenchmark {
private static final String REDIS_KEY = "anon_id";
private Jedis conn;
private long writeTimeNano=0;
private RandomString stringGenerator;
private String[] fields;
public RedisBenchmark(){
conn = new Jedis("localhost");
stringGenerator = new RandomString(32);
}
public void run(int nbWrites, int nbReads){
writeBenchmark(nbWrites);
}
public void writeBenchmark(int amount){
fields = new String[amount];
for(int i=0; i< amount; i++){
fields[i] = stringGenerator.nextString();
}
long start = System.nanoTime();
for(int i=0; i< amount; i++){
write(fields[i]);
}
writeTimeNano+=System.nanoTime()-start;
double seconds = (double)writeTimeNano / 1000000000.0;
System.out.println("[write]nb:"+amount+"|time:"+seconds+"|speed:"+((amount*33)/(seconds*1024*1024))+" MB/s");
}
public void write(String anonId){
conn.hsetnx(REDIS_KEY, anonId, "1");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
RedisBenchmark benchmark = new RedisBenchmark();
benchmark.run(100000, 200);
}
}
RandomString
ランダムな文字列を生成するクラスです (引数は文字列の長さです)
以下は、いくつかの結果です。
[書き込み]nb:100000|時間:4.408319378|速度:0.713905907055318 MB/秒 [書き込み]nb:100000|時間:4.447246995|速度:0.707656949946542 MB/秒
設定ファイルの save to hdd パラメータを変更しようとしましたが、改善されませんでした。
私には2つのアイデアがあります:
1.クライアントとサーバー(redis)が同じマシン上にあるため、ソケットの問題です
2.コネクタの実装にはパフォーマンスの問題があります
更新セット操作のベンチマーク結果:
====== SET ======
10000 リクエストが 0.09 秒で完了
50 の並列クライアント
3 バイトのペイロード
キープアライブ: 199.51% <= 1 ミリ秒
100.00% <= 1 ミリ秒
111111.11 リクエスト/秒
システム仕様 :
- Ubuntu 11.04
- 8GB RAM
- Intel i5 プロセッサ
どんな提案でも大歓迎です。