提问者:小点点

每当我在redis中使用SCAN命令时,键的数量就会减少


我在node.js中使用redis库,每当我使用scan命令时,键的数量就会急剧减少,我有5500万条记录,在完成扫描后变成了5200万条,这可能是什么问题呢?

client.scan(cursor, 'COUNT', count, 'MATCH', match, function (err, res) {
            if (err) return done(err);
            cursor = res[0];
            var records = res[1];
            if (records.length == 0) return done();
            total += records.length;
            callback(null, records, next);
        });

共1个答案

匿名用户

据推测,这300万把丢失的钥匙已经过了它们的生存期,但还没有被取走。

运行scan会触发对这些密钥的读取,这会触发被动过期:

当某个客户端试图访问某个密钥时,该密钥就会被动地过期,并且发现该密钥超时。

我没有看到文档中明确引用触发此操作的scan,但在Twitter的这篇博客文章中对此进行了描述:

扫描将触发被动密钥过期,当密钥被读取时,TTL将被检查,如果它过期,将其丢弃,并返回任何东西。。。。 这种扫描所有键的想法起作用,当扫描完成时内存使用减少。