node.js - NodeRedis client.multi() hgetall 性能

标签 node.js redis node-redis

Node 版本:v7.4.0

node-redis 版本:v.2.6.2

redis_version:2.8.4

ubuntu 14.04 2GB 内存 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;
        });

    });

}

这里的其他人是否同意这是糟糕的表现,我在上面的代码中所做的任何事情是否属于问题的一部分?

最佳答案

您也在为 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;
        });
    });
}

关于node.js - NodeRedis client.multi() hgetall 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43409490/

相关文章:

node.js - 在 Node.js 中使用公钥加密数据

node.js - 可以为 redis 发布/订阅消息设置过期时间

mongodb - Redis Geo - 返回两个地点/经纬度之间的不正确距离

node.js - 你如何使用非 root 用户启动 pm2?

sql-server - 使用 MSSQL 将 SQL Server 与 Nodejs 连接时出现 SQL Server 错误 "[ConnectionError: Login failed for user ' *** *'.] "

Redis扫描匹配大量key的性能?

redis - (错误)WRONGTYPE 键不是有效的 HyperLogLog 字符串值

redis - 按顺序扫描redis排序集

javascript - 我可以让 Node.JS 生成没有 html 页面的 Canvas 吗?

python - 关于python3.4.1客户端连接redis中的char b前缀