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);
}
});
但是它不能工作。但是如果我为每个查询创建不同的客户端,它就可以工作了。我在十几个数据库中查询,我不想每次查询都创建一个新的客户端。
有更好的方法吗?我不熟悉的"节点"方式?谢谢你。
Async函数接受回调函数作为参数。该函数几乎立即返回,并且在工作完成后调用回调函数,而不是阻塞调用者。所以你的第一个调用返回之前,它调用redis完成和第二个调用正在立即进行,这可能搞砸了第一个调用,因为他们共享同一个客户端。
如果您只有两个呼叫要进行,简单的答案是将第二个呼叫放在第一个呼叫的回调中。如果你需要连续进行大量异步调用,可以考虑使用promises或一些可用的库,如async.
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- j查询utc offSets的时差
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何处理node.js节点mongodb中的连接和查询队列
- 如何从 HTML 查询中删除项目
- 从查询字符串参数推断出正确的数据类型
- 将curl查询转换为jQuery.ajax()
- 触发媒体查询断点时刷新页面
- 使用DynamoDB查询返回
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- 如何将PHP get查询转换为Meteor's HTTP.get()
- AngularJS:获取链接中没有哈希的查询字符串值
- 捕获初始RedQueryBuilder查询中的SQL问题
- AngularJS,如何更改查询字符串
- 具有大型几何图形的基于沙发的空间查询
- 在php中提交数据时,如果某些值为null,而某些值为非null,如何进行查询
- 如何在 node.js 中查询 redis 中的值
- 我们可以使用Jmeter运行一个特定的Redis查询吗
- Nodejs Redis:同一个客户端在不同的Redis数据库中进行多个查询
- 如何使用when.js的承诺从node.js对redis进行两次查询