我想使用键匹配模式'LOGIN::'搜索redis数据库。我在我的应用程序中使用碘化体。昨天我搜索了整个网络,我得到了一些正在做这项工作的选项,如下所示:
钥匙
扫描流
问题:
import Redis from 'ioredis'
var Client = new Redis()
Client.scanStream <---- Missing
Redis 实例中缺少 scanStream 方法,或者如果我做错了什么,请告诉我。
所以这是示例代码,可以给你一个广泛的想法。因此,您可以使用 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);
});
给你一个例子。
const stream = redis.scanStream()
stream.on("data", async (keys) => {
// do what you need
})