Redis 不会立即删除密钥



编辑:原来是节点导致了这种情况。for 循环以某种方式运行下一次迭代,然后等待承诺解析。Redis在这里什么都不做。

我有一个程序,可以迭代一系列我想与 Redis 中的键进行比较的东西。如果条件已满,我想从数据库中删除密钥。我为此使用碘化。 代码如下:

async function checkthings () {
for (const thing of list_of_things) {
await new Promise(function (resolve, reject){
let stream = redis.scanStream({ match: '5:*'})
stream.on("data", async function (result){
result.length > 0 ? console.log(result) : null;
stream.pause();
for (const key of result) {
let result = await redis.hgetall(key);
if ([CONDITIONS PUT HERE])
await redis.del(key);
}
stream.resume();
})
stream.on("end", function (){
console.log("Done iterating.");
resolve();
})
});
}
}   
}

问题是当我运行此代码时,在第一次迭代中一切都正常运行。但在第二次迭代中,应该删除的密钥列在 SCAN 结果中。即使使用KEYS仍然会导致它显示。我不知道这是我的节点.JS还是 Redis 的错误。

抱歉,如果问题难以阅读。这是我的第一个问题。

来自SCAN文档

给定元素可能会多次返回。由应用程序来处理重复元素的情况,例如,仅使用返回的元素来执行多次重新应用时安全的操作。

所以这应该从雷迪斯的SCAN

相关内容

  • 没有找到相关文章

最新更新