我在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);
});
据推测,这300万把丢失的钥匙已经过了它们的生存期,但还没有被取走。
运行scan
会触发对这些密钥的读取,这会触发被动过期:
当某个客户端试图访问某个密钥时,该密钥就会被动地过期,并且发现该密钥超时。
我没有看到文档中明确引用触发此操作的scan
,但在Twitter的这篇博客文章中对此进行了描述:
扫描将触发被动密钥过期,当密钥被读取时,TTL将被检查,如果它过期,将其丢弃,并返回任何东西。。。。 这种扫描所有键的想法起作用,当扫描完成时内存使用减少。