gpt4 book ai didi

javascript - 从 Redis 获取键列表?

转载 作者:IT王子 更新时间:2023-10-29 06:10:16 26 4
gpt4 key购买 nike

我有部分更大的哈希集具有相同的约定:

redis.hmset("this:that:a", {"one": 'two', "three": 'four'});
redis.hmset("this:that:b", {"five": "six", "seven": "eight"});

var all_parts = {};

redis.keys("this:that:*", function(err, keys) {
for (var i=0; i<keys.length; i++){
key = keys[i];

redis.hgetall(key, function(err, obj) {

all_parts[key] = obj;

if (i >= keys.length) {
return console.log(all_parts);
} else {
return console.log('waiting');
}

});
};
});

结果在...的console.log中

{ 'this:that:a': { five: 'six', seven: 'eight' } }
{ 'this:that:a': { one: 'two', three: 'four' } }

我不明白发生了什么,感谢任何帮助。

最佳答案

首先,初步评论:您不应该在用户应用程序中使用 KEYS 命令。这是一个 O(n) 调试命令。如果您在 Redis 中有很多键,它会在每次调用时卡住实例。

现在,关于程序本身,您需要检查 Javascript 的作用域规则(适用于闭包的规则)。在这里,您在 hgetall 回调中访问了关键变量,但它没有在闭包中正确捕获(for 循环没有定义闭包,您需要一个函数)。

这里是一个可能的修复:

redis.hmset("this:that:a", {"one": 'two', "three": 'four'});
redis.hmset("this:that:b", {"five": "six", "seven": "eight"});

var all_parts = {};

redis.keys("this:that:*", function(err, keys) {

var count = keys.length;
keys.forEach( function(key) {
redis.hgetall(key, function(err, obj) {
all_parts[key] = obj;
--count;
if (count <= 0) {
console.log(all_parts);
} else {
console.log('waiting');
}
});
});
});

返回:

waiting
{ 'this:that:b': { five: 'six', seven: 'eight' },
'this:that:a': { one: 'two', three: 'four' } }

查看更多信息:

hdel inside hget block nodejs redis

nodejs, redis. check if keys exists and create new if not

For loop get items from redis delay

关于javascript - 从 Redis 获取键列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16580218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com