【发布时间】:2019-07-06 16:04:12
【问题描述】:
我正在使用带有 redis npm 包的 Node.JS 脚本来检索与模式 animals:toFeed:* 匹配的所有 Redis 键。匹配的示例将是键 animals:toFeed:17ed160f59c5b31caf7e741a4e62cb7785414cd。
使用下面的代码,可以有 10 个匹配项,但代码只会返回几个,例如 2-3。可能是什么问题,我们该如何解决?
使用 Redis 4.0.11、Node.js 8.11.3、redis 2.8.0 npm 包
async function scanAsync(cursor, pattern, results) {
return redis.scanAsync(cursor, 'MATCH', pattern, 'COUNT', '10')
.then(function(reply) {
cursor = reply[0]
if(cursor === '0') {
console.log('Scan complete')
} else {
console.log('Match #', i)
let keys = reply[1]
keys.forEach(function(key, i) {
results.push(key)
})
return scanAsync(cursor, pattern, results)
}
})
}
let keys = []
let prefix = 'animals:toFeed:*'
await scanAsync('0', prefix, keys)
更新
- 重新启动redis。仍有不完整的扫描结果
- 删除了与模式匹配的所有键并添加了一些键。现在在进行 SCAN 时一切都返回了。玩了一个小时后,它又开始返回不完整的结果。重复此操作不再能解决问题。
【问题讨论】:
标签: javascript node.js redis node-redis