首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs Redis按特定前缀删除包括其字段在内的所有key

问Nodejs Redis按特定前缀删除包括其字段在内的所有key
EN

Stack Overflow用户
提问于 2021-10-18 13:35:17
回答 1查看 173关注 0票数 0

我有下面这段代码,用来从Redis中删除记录

代码语言:javascript
复制
public hdel(hash: string, field?: string) {
    return new Promise((resolve, reject) => {
        if (!field) {
            this.store.del(hash, (err, response) => {
                if (err) {
                    reject(err);
                    return;
                }
                resolve(response);
            });
            return;
        }
        this.store.hdel(hash, field, (err, response) => {
            if (err) {
                reject(err);
                return;
            }
            resolve(response);
        });
    });
}

如果没有指定字段,我将删除所有字段。

store只是一个RedisClient。

我正在使用Redis package

我希望删除所有以我给出的前缀开头的记录,例如,我有以下代码:

代码语言:javascript
复制
async deleteSessionFiles(sessionId: string) {
    const path = SessionPathResolver.resolveSessionAllFiles(sessionId);
    await this.cacheService.hdel(path);
}

这段代码通过在路径末尾使用* (例如sessions/gHs46f/files/* ),按会话ID生成redis ALL记录路径

代码语言:javascript
复制
static resolveSessionAllFiles = (sessionId: string) => {
    return `sessions/${sessionId}/files/*`;
}

然后我使用我在问题开头提供的函数。

但是,与知道给出给定前缀的所有记录的KEYS prefix/*命令不同,该命令不会删除所有记录,甚至不会删除一条记录。使用这个包或一般情况下,执行此类操作的正确方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2021-10-18 13:43:56

您可以使用Redis SCAN命令通过光标获取键,并使用DEL删除所有获取的键,并在键上迭代,而不会产生KEYS *的不良影响

阅读有关SCAN command here的更多信息

和在redis package中使用SCAN的Here an example

另外,see this question and its answers有很多批量删除的好方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69617082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档