我面临一个非常奇怪的问题:使用 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是一个生成随机字符串的类(arg 是字符串长度)
以下是一些结果:
[写入]nb:100000|时间:4.408319378|速度:0.713905907055318 MB/s [写入]nb:100000|时间:4.447246995|速度:0.707656949946542 MB/s
我尝试在配置文件中修改 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 处理器
任何建议将不胜感激。