1

我目前正在使用 kue / node.js

https://github.com/Automattic/kue

创建并保存作业后,数据将在我的本地 redis 服务器中。

  var job = queue.create('new_job', {
        title: 'welcome email for tj'
        , to: 'tj@learnboost.com'
        , template: 'welcome-email'
    }).save( function(err){
        if( !err ) console.log( job.id );
    });

Redis CLI

127.0.0.1:6379> keys *
 1) "q:job:12"
 2) "q:jobs:inactive"
 3) "q:stats:work-time"
 4) "q:ids"
 5) "q:job:11"
 6) "q:job:7"
 7) "q:search:object:13"
 8) "q:search:word:TTL"
 9) "q:search:object:2"
10) "q:jobs:new_job:inactive"
  ..........

现在我重新启动机器并再次检查后,

127.0.0.1:6379> keys *
(empty list or set)

所以它是空的。

这很明显,但我想保留数据,我检查了 kue 文档但我找不到任何东西?

有没有办法做到这一点。

提前致谢 。

4

2 回答 2

3

我认为持久性可以通过您的 redis 服务器配置来处理。在您的redis.conf中,您有一个注释部分snapshotting,您应该探索它。有很多方法可以配置持久性,但我认为最适合您的用例的是 AOF,其中对 redis 服务器的所有传入写入都记录到一个文件中。请在此处阅读有关如何配置 redis 以实现持久性的信息。您可以通过将此行添加到您的 conf 文件来打开 AOF 持久性:

appendonly true
于 2016-01-08T12:04:50.083 回答
0

实际上,除非您手动删除作业,否则 kue 不会删除作业。

这是一个示例,保存为 test.js:

const kue = require('kue')
const queue = kue.createQueue()
queue.process('echo', (job, done) => {
  console.log(job.data.message)
  done();
})
const job = queue.create('echo', {
  message: 'hello world'
}).save((err) => {
  if (err) {
    console.log(job.id)
  }
})

当我通过

node test.js

我在redis中查看队列信息,结果redis-cli keys "q*"如下:

在此处输入图像描述

然后我重新启动node test.js,`redis-cli keys "q*" 的结果如下:

在此处输入图像描述

实际上,这里添加一个新任务:q:job:2. kue调用时将删除作业job.remove。所以你应该检查 redis-server 的日志文件,看看发生了什么。

于 2016-01-08T12:28:45.400 回答