簡體   English   中英

Nodejs Redis:具有相同客戶端的不同redis數據庫中的多個查詢

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

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

但它不起作用。 但是如果我為每個查詢創建不同的客戶端,它就可以工作。 我在十幾個數據庫中查詢,並且不希望每次進行查詢時都創建一個新客戶端。

有一個更好的方法嗎? 我不熟悉的“節點”方式? 謝謝。

異步函數將回調函數作為參數。 函數立即返回,並在完成工作后調用回調,而不是阻塞調用者。 因此,您的第一個呼叫在其對redis的呼叫完成之前返回,並且第二個呼叫正在立即進行,這可能會阻止第一個呼叫,因為它們共享同一個客戶端。

如果您只有兩個撥打電話,簡單的答案是將第二個電話放在第一個電話的回叫中。 如果你需要在系列中進行大量的異步調用,請查看使用promises或一些可用的庫,如async

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM