我可以用 kue / node.js 保存数据吗

Can I persist data with kue / node.js

我目前正在使用 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 客户端

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 文档但找不到任何内容?

有什么办法可以做到吗

提前致谢。

我认为持久化可以通过你的redis服务器配置来处理。在你的redis.conf, you have a section commented snapshotting which you should explore. There are a number of ways to configure persistence, but I think what best suits your use case is AOF wherein all incoming writes to the redis server are logged to a file. Please do read about how redis can be configured for persistence here。您可以通过将此行添加到您的 conf 文件来打开 AOF 持久性:

appendonly true

实际上,除非您手动删除作业,否则 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键"q*"的结果如下:

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