1

我想用键匹配模式'LOGIN::'搜索redis数据库。我在我的应用程序中使用 ioredis。昨天我搜索了整个网络,但我得到的选项很少,如下所示:

扫描流

问题:

import Redis from 'ioredis'

var Client = new Redis()

Client.scanStream <---- Missing

Redis 实例中缺少 scanStream 方法,或者如果我做错了什么,请告诉我。

4

2 回答 2

1

所以这是示例代码,可以为您提供一个广泛的想法。所以你可以使用 redis 提供的两个东西。首先是 KEYS 函数,由于它的 O(N) 复杂性,它不应该被使用。此示例在流中使用扫描命令,即逐个使用不同的光标位置。它将扫描整个 redis,但一次返回 10 个结果,这不会像 KEYS 函数那样停止 redis。我们会将所有键推送到一个键数组中,之后您可以遍历所有键并使用 GET 命令获取每个键的值。

const redis = require('ioredis');
    let stream = redis.scanStream({
        match: "LOGIN::*",
        count: 10
    });
     stream.on("data", async (keys = []) => {
                        let key;
                        for (key of keys) {
                            if (!keysArray.includes(key)) {
                                await keysArray.push(key);
                            }
                        }
                    });
                    stream.on("end", () => {
                        res(keysArray);
                    });
于 2020-08-19T08:15:42.303 回答
0

给你一个例子。

const stream = redis.scanStream()
stream.on("data", async (keys) => {
  // do what you need
})
于 2019-11-20T02:35:30.257 回答