最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Redis不会立即删除密钥

运维笔记admin21浏览0评论

Redis不会立即删除密钥

Redis不会立即删除密钥

EDIT:原来是导致此问题的节点。 for循环以某种方式在等待promise解决之前运行下一个迭代。 Redis在这里不做任何事情。

我有一个程序,该程序迭代要与Redis中的键进行比较的一系列事情。如果条件已满,我想从数据库中删除密钥。我为此使用ioredis。代码如下:

async function checkthings () {
        for (const thing of list_of_things) {
            await new Promise(function (resolve, reject){
                let stream = redis.scanStream({ match: '5:*'})

                stream.on("data", async function (result){
                    result.length > 0 ? console.log(result) : null;
                    stream.pause();

                    for (const key of result) {
                        let result = await redis.hgetall(key);

                        if ([CONDITIONS PUT HERE])
                             await redis.del(key);

                    }

                    stream.resume();
                })

                stream.on("end", function (){
                    console.log("Done iterating.");
                    resolve();
                })
            });
        }
    }   
}

问题是,当我运行此代码时,在第一次迭代中,一切正常运行。但是在第二次迭代中,应该删除的密钥在SCAN结果中列出。即使使用KEYS仍然会在其上显示结果。我不知道这是我的Node.JS还是Redis的故障。

很抱歉,这个问题很难读。这是我的第一个问题。

回答如下:

SCAN documentation

给定元素可以多次返回。由应用程序来处理重复元素的情况,例如仅使用返回的元素来执行多次重新应用时安全的操作。

因此,这应该从Redis的SCAN开始

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论