我正在使用带有express(nodejs)的ioredis我知道有一种方法可以通过这样的模式删除键:
redis-cli KEYS "sample_pattern:*" | xargs redis-cli DEL
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法使用ioredis呢?
lui*_*uin 19
按模式删除键的最直接方法是使用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();
});
Run Code Online (Sandbox Code Playgroud)
但是,当您的数据库具有大量密钥(例如一百万个)时,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');
});
Run Code Online (Sandbox Code Playgroud)
不要忘记查看scan命令的官方文档以获取更多信息:http://redis.io/commands/scan.
小智 7
首先按模式选择密钥,然后按del方法删除它们。
const keys = await ioredis.keys('PATTERN:*');
await ioredis.del(keys);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7262 次 |
| 最近记录: |