我在Express(Node.js)中使用Ioredis
我知道有一种方法可以通过如下模式删除密钥:

redis-cli KEYS "sample_pattern:*" | xargs redis-cli DEL

但是,有没有办法使用ioredis来做到这一点?

最佳答案

按模式删除键的最直接方法是使用keys命令获取与模式匹配的键,然后一个一个地删除它们,这与您提供的命令行示例类似。这是使用ioredis实现的示例:

var Redis = require('ioredis');
var redis = new Redis();
redis.keys('sample_pattern:*').then(function (keys) {
  // Use pipeline instead of sending
  // one command each time to improve the
  // performance.
  var pipeline = redis.pipeline();
  keys.forEach(function (key) {
    pipeline.del(key);
  });
  return pipeline.exec();
});

但是,当数据库中有大量密钥(例如一百万个)时,keys将阻塞数据库几秒钟。在这种情况下,scan更有用。 ioredis具有scanStream功能,可帮助您轻松地遍历数据库:
var Redis = require('ioredis');
var redis = new Redis();
// Create a readable stream (object mode)
var stream = redis.scanStream({
  match: 'sample_pattern:*'
});
stream.on('data', function (keys) {
  // `keys` is an array of strings representing key names
  if (keys.length) {
    var pipeline = redis.pipeline();
    keys.forEach(function (key) {
      pipeline.del(key);
    });
    pipeline.exec();
  }
});
stream.on('end', function () {
  console.log('done');
});

不要忘记查看scan命令的官方文档以获取更多信息:http://redis.io/commands/scan

08-15 18:08