我使用Node.JS脚本和redis npm包来检索与模式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) 更新
发布于 2018-10-18 06:09:03
当游标等于results时,您忘记将键添加到'0'中,但是您应该始终添加这些键。
您可以按以下方式考虑您的代码:
async function scanAsync(cursor, pattern, results) {
return redis.scanAsync(cursor, 'MATCH', pattern, 'COUNT', '10')
.then(function(reply) {
let keys = reply[1]
keys.forEach(function(key) {
results.push(key)
})
cursor = reply[0]
if(cursor === '0') {
console.log('Scan complete')
} else {
return scanAsync(cursor, pattern, results)
}
})
}发布于 2019-07-06 08:04:12
https://stackoverflow.com/questions/52864230
复制相似问题