我在node.js中使用redis客户端
var db = require("redis");
var dbclient = db.createClient();
我以以下方式加载数据库:
dbclient.zrange("cache", -1000000000000000, +1000000000000000, function(err, replies){
logger.info("Go to cache");
for (var i=0; i < replies.length; i++){
(function(i){
// Do some commands with the result
})(i)
}
})
我注意到启动我的应用程序需要30秒钟。数据库查询执行。在这段时间内,没有其他来自Express
模块的请求得到处理。
我该如何解决这个问题?为什么没有异步?
如果您担心正常运行时间,则应该使用ZSCAN
使用COUNT选项可获取有关每次通话的更多数据,但请记住:
尽管SCAN不能保证每次迭代返回的元素数量,但可以使用COUNT选项根据经验调整SCAN的行为
并在每个结果上使用setImmediate函数迭代到下一个SCAN。
var cursor = '0';
function doscan(){
dbclient.zscan("cache", cursor, "COUNT", "100", function(err, replies){
logger.info("Go to cache");
// Update the cursor position for the next scan
cursor = res[0];
if (cursor === '0') {
return console.log('Iteration complete');
} else {
for (var i=0; i < replies.length; i++){
(function(i){
// Do some commands with the result
})(i)
}
setImmediate(function() { doscan() });
}
})
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句