当前位置: 首页 > 知识库问答 >
问题:

Redis SCAN未给出NodeJS中的所有匹配项

沃弘图
2023-03-14

我正在使用带有Redisnpm包的node.js脚本来检索匹配模式Animals:toFeed:*的所有Redis键。匹配的一个示例是关键字Animals:toFeed:17ed160f59c5b31caf7e741a4e62cb7785414cd

使用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) 
  1. 重新启动Redis。仍有不完整的扫描结果
  2. 删除了与模式匹配的所有键,并将一些键添加回来。现在所有的东西都在扫描时返回。在一个小时的播放后,它再次开始返回不完整的结果。重复此操作将无法修复此问题。

共有1个答案

任宾鸿
2023-03-14

当光标等于“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)
            }
        })
}
 类似资料:
  • 问题内容: 从那时起,我一直在TutorialsPoint上查看代码,此后一直困扰着我……看一下这段代码: 此代码成功打印: 但是根据正则表达式,为什么它不返回其他可能的结果,例如: 要么 如果此代码不适合这样做,那么我该如何编写一个可以找到所有可能匹配项的代码? 问题答案: 这是因为的贪婪,随之而来的是回溯。 字串: 正则表达式: 我们都知道那是贪婪的,并且尽可能匹配所有字符。因此,第一个匹配所

  • 问题内容: 我有一个.DRL文件,其中有10条规则。插入事实后,可能会匹配一些规则-如何找出以编程方式匹配的规则? 问题答案: 请注意,此答案对不超过5.x的Drools版本有效。 如果您已升至6或更高,请查看@ melchoir55的修改后答案。我还没有亲自测试过,但是我相信它会起作用。 若要跟踪规则激活,可以使用AgendaEventListener。下面是一个示例,可在此处找到: https

  • 问题内容: 有没有办法确保子句中的所有值都匹配? 例: 我可以将IN用作:。 我需要它像跨多个行一样工作。 更新: 我需要它来列出数据库中符合指定参数的公司。公司和分类法之间存在很多关系。我正在使用Yii框架。这是我的控制器的代码: 问题答案: 您可以执行以下操作: 如果您提供架构和一些示例数据,我可以提供一个更相关的答案。 SQL小提琴示例

  • 我只想替换字符串中的单词,如果单词字符或单词前后没有连字符。 文本: 替换后的预期结果: 正则表达式: < li >正则表达式当前仅匹配第一个匹配项(< code>#后的按钮)。我需要做什么来匹配所有事件? < li >如何在Java中将< code>button替换为< code>text或任何其他单词? 我读过主题我能在Java regex中替换组吗?,但是我真的不明白如何为我的特殊情况使用示

  • 问题内容: 我想通过搜索突出显示所有匹配的单词。我写了代码,但是不能使用循环。当我搜索单词时,我的应用程序会找到单词并仅突出显示第一个单词。这是我的代码 我很快就很新。抱歉,编码错误。我的代码找到匹配项计数,但是如何突出显示所有匹配项,谢谢 问题答案: 基于NSRegularExpression的强制性解决方案。

  • 我试图找出我的字符串是否包含从a到z的所有字母 我们可以通过其他方法解决这个问题,但我正在尝试仅使用模式和匹配器来解决它。