Redis hash写入速度非常慢

我面临一个非常奇怪的问题:使用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.4139469070553 |速度:0.707656949946542 MB / s

我试图修改配置文件中的save to hdd参数,但没有任何改善。

我有2个想法:

1.由于客户端和服务器(redis)在同一台计算机上,因此存在套接字问题

2.连接器实现存在性能问题

设置操作的基准结果:

====== SET =======

0.09秒内完成10000个请求

50个并行客户端

3个字节有效负载

保持活动状态:1

99.51%<= 1毫秒

100.00%<= 1毫秒

111111.11每秒请求

系统规格:

-Ubuntu

11.04-8GB RAM

-Intel i5处理器

任何建议将不胜感激。

回答:

您需要更多地考虑使用该程序进行基准测试的情况。我可以告诉您,这不是Redis,而是您的系统在两个进程之间运行乒乓游戏的能力(因为所有hsetnx调用都是同步的)。

在尝试对Redis进行基准测试之前,请先阅读此页面,它一定会对您有所帮助。

您认为Redis的速度应该接近RAM的写入速度的假设有些天真。Redis是一个

存储,对于O(1)操作,大部分开销是由于通信成本造成的。对于同步流量(如您的示例),这也是由于OS调度程序的成本。

如果要按顺序应用许多命令,则需要使用pipelining。或者,如果您不关心序列,则可以同时使用多个连接(这是redis-

benchmark的默认模式)。或者,您可以尝试发送异步命令。在所有情况下,其想法是将往返Redis服务器的往返费用分摊

通过对具有异步流量的多个连接进行流水线化,您将获得Redis在此计算机上可以实现的最大吞吐量。

以上是 Redis hash写入速度非常慢 的全部内容, 来源链接: utcz.com/qa/435740.html

回到顶部