我正在使用node.js redis client。在运行单元测试之前,我想清除所有redis键。由于一些奇怪的原因,我的代码什么也没做。
const redis = require('redis');
const client = redis.createClient({
host: conf.host,
port: conf.port,
prefix: conf.prefix
});
client.on('connect', err => {
// everything is OK here. I can set and get.
});
module.exports = redis;
在开始测试之前,我想清除缓存:
const redis = require('file-above');
before(done => {
redis.keys('*', function (err, rows) {
rows.forEach(row => {
console.log(row); // perfectly matched
redis.del(row);
// nothing changed. I can still get any of the rows above here
});
});
done();
});
在此之后没有删除任何内容。我试图添加setTimeout
,试图使用直接redis.del('*', done)
没有键匹配。
我在redis
包自述文件中找不到任何与.del
相关的内容,无法弄清楚我做错了什么。
3条答案
按热度按时间zazmityj1#
如果合适的话,你应该使用
flushall
。更多的文档请看这里http://redis.io/commands/FLUSHALL。但是,关于你的实现,我认为你需要传递一个回调到del
。cbeh67ev2#
问题是你正在使用一个前缀。所以如果你使用keys函数(从文档中它不会附加任何前缀)。但是如果你使用从keys函数中得到的keys并使用它来删除它会再次附加前缀。所以你需要创建一个新的没有前缀选项的redis客户端并使用它,或者你可以在调用del函数之前删除keys数组中的前缀。
例如,您的前缀是**'TEMP:'如果您使用keys函数'*'它会得到keys ['TEMP:name','TEMP:age']
但是在del函数中,如果你迭代数组,会发生的是,要删除的键的名称变成'TEMP:TEMP:name'**,因为redis将aprefix添加到del函数中,所以键不会被删除。
在循环中迭代时,可以删除键数组中的前缀
sgtfey8w3#
redis
NPM包中没有flushdb
或flushall
命令的实际实现。如果你想清除
node.js
中的所有redis
键,你必须使用sendCommand
,像这样:在Redis NPM Package的不支持的Redis命令一节中有更多相关信息。