Я столкнулся с очень странной проблемой: я получаю очень плохую скорость записи при использовании Redis (в идеальном мире скорость записи должна приближаться к скорости записи в ОЗУ).
Вот мой ориентир:
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 МБ/с [запись]nb:100000|время:4,447246995|скорость:0,707656949946542 МБ/с
Я попытался изменить параметры сохранения на жесткий диск в файле конфигурации, но без каких-либо улучшений.
У меня есть две идеи:
1. Это проблема с сокетом, поскольку клиент и сервер (redis) находятся на одном компьютере
2. Реализация коннектора имеет проблемы с производительностью.
ОБНОВЛЕНИЕ Результаты тестов для работы с наборами:
====== SET ======
10 000 запросов, выполненных за 0,09 секунды
50 параллельных клиентов
3 байта полезной нагрузки
keep active: 199,51% ‹= 1 миллисекунда
100,00% ‹= 1 миллисекунда
111111,11 запросов в секунду
Спецификация системы :
— Ubuntu 11.04
— 8 ГБ ОЗУ
— процессор Intel i5
Любое предложение будет принята с благодарностью.