2017-04-14 41 views
0

节点版本:V7.4.0NodeRedis client.multi()hgetall性能

节点redis的版本:v.2.6.2

redis_version:2.8.4

的ubuntu 14.04 2GB RAM VPS实例

我得到的迹象表明,node_redis hgetall性能不是它应该是,但可能我做错了什么。我有一个有31669个元素的排序集。元素是散列键,每个散列有14个字段,大小约为256字节。检索散列需要64秒,这似乎太慢了。 下面是函数的样子:

function getAllAnnotations() 
{ 
var currentSeconds = Math.floor((new Date()).getTime()/1000); 
console.log('currentSeconds before zrange: ' + currentSeconds); 

    client.zrangebyscore("geoHashSortedSet", "-inf", "+inf", function(err, reply) { 

     multi = client.multi(); 
     for (var uuid in reply) { 
      multi.hgetall(reply[uuid]); 

     } 
     multi.exec(function(err, replies) { 

      var currentSeconds = Math.floor((new Date()).getTime()/1000); 
      console.log('currentSeconds after multi returns: ' + currentSeconds); 
      allAnnotations = replies; 
     }); 

    }); 

} 

千万人在这里都认为这是表现不佳,有什么我做在上面的代码,这是问题的一部分?

+0

您是否尝试过['client.batch()'](https://github.com/NodeRedis/node_redis#clientbatchcommands)?你也不只是计时批次,而是'zrangebyscore'。 – robertklep

+0

我会尝试client.batch()。是的,我意识到我正在计时zrangebyscore。大概我不应该包括它。谢谢。 – bhartsb

回答

2

您正在计时zrangebyscore以及您正在使用-inf+inf这意味着整个元素。为什么使用zrange而不是0-1。这可能会更快。

试试这个

function getAllAnnotations() 
{ 
    var start = Date.now(); 

    client.zrange("geoHashSortedSet", 0, -1, function(err, reply) { 
     console.log('zrange took ', Date.now() - start); 
     start = Date.now(); 

     multi = client.multi(); 
     reply.forEach(function(id) { 
      multi.hgetall(id); 
     }); 
     multi.exec(function(err, replies) { 

      console.log('multi took', Date.now() - start); 
      allAnnotations = replies; 
     }); 
    }); 
} 
+0

我想要整个元素,我也想到zrangebyscore的时间是相当微不足道的,所以这就是我原来包含它的原因。我将zrange与zrangebyscore进行了比较,他们在redis-cli的同一时间运行。谢谢,但是我从node-redis维护者那里得到的答案。 – bhartsb

0

答案从NodeRedis维护者传来:

你很可能会使用较旧的Redis的解析器版本,仍然有大嵌套数组的问题。实施有一个漏洞,一开始就被忽视。

只要您更新依赖关系,您的问题就会消失。作为一个方面说明:通过使用批次而不是多次,如果您不需要进行交易,您的绩效应该再次提高。

总的来说,您的电话不应该花费很长时间。

裁判:https://github.com/NodeRedis/node_redis/issues/1225

我使用Redis的解析器版本是v.2.0.3 - 6月17日,2016年更新到v.2.6.0 - 2017年4月3日固定的问题,因为我的时间去从〜64秒降至〜2秒