Nodejs Redis:具有相同客户端

时间:2016-10-17 16:25:25

标签: javascript node.js redis

我对Nodejs及其异步方式不是很熟悉。 我正在尝试查询redis的不同数据库。

我有一个简单的函数来从redis数据库中获取密钥:

function get_key(client, key, db, callback) {
    if (key) {
            client.select(db, function(e, s) {
                    if (e) {
                            console.log('client.select err: ' + e);
                    } else if (s) {

                            client.get(key, function(e, s) {

                                    callback(e, s);
                                    return s;
                            });
                    }
            });
    }

    return

}

我正在用它来查询这样的多个数据库:

get_key(client, key1, 0, function(e, s) {
    if (s) {
            // do stuff with s;
    } else {
            debug('e: ' + e);
    }
});

get_key(client, key2, 1, function(e, s) {
    if (s) {
            // do stuff with s;
    } else {
            debug('e: ' + e);
    }
});

但它无法正常工作。但是如果我为每个查询创建不同的客户端,它就可以工作。我在十几个数据库中查询,并且不希望每次进行查询时都创建一个新客户端。

有更好的方法吗?我不熟悉的“节点”方式?谢谢。

1 个答案:

答案 0 :(得分:0)

异步函数将回调函数作为参数。函数立即返回,并在完成工作后调用回调,而不是阻塞调用者。因此,您的第一个呼叫在其对redis的呼叫完成之前返回,并且第二个呼叫正在立即进行,这可能会阻止第一个呼叫,因为它们共享同一个客户端。

如果您只有两个拨打电话,简单的答案是将第二个电话放在第一个电话的回叫中。如果您需要批量生成大量异步调用,请查看使用promises或某些可用库,例如​​async