Nodejs Redis:同一个客户端在不同的Redis数据库中进行多个查询

Nodejs Redis: Multiple queries in different redis databases with same client

本文关键字:Redis 查询 数据库 同一个 客户端 Nodejs      更新时间:2023-09-26

我对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);
    }
});

但是它不能工作。但是如果我为每个查询创建不同的客户端,它就可以工作了。我在十几个数据库中查询,我不想每次查询都创建一个新的客户端。

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

Async函数接受回调函数作为参数。该函数几乎立即返回,并且在工作完成后调用回调函数,而不是阻塞调用者。所以你的第一个调用返回之前,它调用redis完成和第二个调用正在立即进行,这可能搞砸了第一个调用,因为他们共享同一个客户端。

如果您只有两个呼叫要进行,简单的答案是将第二个呼叫放在第一个呼叫的回调中。如果你需要连续进行大量异步调用,可以考虑使用promises或一些可用的库,如async.