我在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。