在 Redis 中,要进行模糊删除的话可以使用通配符来匹配需要删除的 key。
- 使用 keys 命令查找符合条件的 key:
redisClient.keys('prefix:*', function (err, keys) {
if (err) return console.log(err);
for(var i = 0, len = keys.length; i < len; i++) {
redisClient.del(keys[i]);
}
});
这里的 prefix:*
是要匹配的 key 的前缀,可以使用 *
通配符进行模糊匹配。这个命令会返回一个数组,包含所有符合条件的 key。
- 使用 scan 命令逐个遍历并删除符合条件的 key:
function deleteKeysMatchingPattern(pattern, callback) {
var matchCount = 0;
var cursor = '0';
function scan() {
redisClient.scan(cursor, 'MATCH', pattern, 'COUNT', '100', function (err, reply) {
if (err) return callback(err);
cursor = reply[0];
var keys = reply[1];
matchCount += keys.length;
if (keys.length > 0) {
redisClient.del(keys, function (err, res) {
if (err) return callback(err);
if (cursor === '0') {
callback(null, matchCount);
} else {
scan();
}
});
} else {
if (cursor === '0') {
callback(null, matchCount);
} else {
scan();
}
}
});
}
scan();
}
这里的 scan
函数会使用 scan 命令逐个遍历符合条件的 key,并使用 del 命令删除它们。这种方法可以避免一次性返回大量符合条件的 key,导致内存占用过高。