在确保作业成功完成并被删除的同时,我的redis仍然看到一些剩余物。 处理完一项工作后,我在redis上做了这个:
1) "q:job:1:log"
2) "q:job:1"
3) "q:ids"
4) "q:stats:work-time"
6) "q:job:types"
我认为,不应将q:job:1:log和1:job:1留在那儿..对于以后的每个工作流程,我都会得到更多的q:job:X:log和q:job :X,而X是作业的索引号。
问题是.. redis应该被这些键填满还是有问题?在生产一段时间后,这变得肿了!
起初我以为我可能没有以足够好的方式删除作业,所以我将removeOnComplete(true)更改为false并在该作业的onComplete调用上添加了一个手动job.remove(),但它甚至显示了剩余的工作量更多(经过冲洗和一个新的工作流程之后):
1) "q:job:1:log"
2) "q:job:1"
3) "q:jobs:complete"
4) "q:ids"
5) "q:jobs:runNewJob:complete"
6) "q:stats:work-time"
8) "q:job:types"
这表明现在完成的工作完全留在了那里,好像我根本没有尝试删除它们一样-不仅仅是其中的一些剩余物。。
这是我使用的两个版本的代码:
主要尝试:
queue.create('runNewJob', {id, anotherId})
.ttl(SOME_TTL)
.priority('high')
.removeOnComplete(true)
.on('complete', (result) => {
// some code and logs..
})
.on('failed', (err) => {
// Some logs and code..
})
.save();
第二次尝试:
let job = queue.create('runNewJob', {id, anotherId});
job.ttl(SOME_TTL)
.priority('high')
.removeOnComplete(false)
.on('complete', (result) => {
job.remove((err) => {
if (err) console.log(err)
else console.log("REMOVED") // This does get printed
});
// some code and logs..
})
.on('failed', (err) => {
// Some logs and code..
})
.save();
无论如何,第一个代码看起来都像作业被删除了,但是留下了那些q:jobs:X [:log]键,它们也具有值:
hgetall q:job:1
1) "progress"
2) "0"
3) "updated_at"
4) "1529484320301"
和
127.0.0.1:6379> lrange q:job:1:log 0 -1
1) "Upload succesfull"
2) "Cleaning tmp output dir ./tmp/5b2a141f6861c31ae1e92910"
似乎显示了我在处理此作业时所做的日志。
谢谢! :)