首页 > 解决方案 > 回复错误:ERR 未知命令“evalsha”(Node.js,公牛)

问题描述

我正在尝试在 Windows 上使用带有 Redis 的公牛包进行大量工作,我的服务器已启动并正在运行,但是当我尝试访问该作业时,它给了我一个错误,我的代码到目前为止。

const queue = require('bull');
const jobs = new queue('jobs')

jobs.process((job, done) => {

    try {
        console.log(job)

    } catch (error) {
        console.log(error)
    }
   })

app.post('/upload', (req, res) => {

    let dat = req.query;

    jobs.add(dat).then(() => {
        console.log('done')
    }).catch(e => console.log(e))

    res.send('job done')
})

这是错误:

{ name: 'evalsha',
  args:
   [ '0a9a51ee96320953ec7bde8e63f3f060b9dac00c',
     '6',
     'bull:jobs:wait',
     'bull:jobs:paused',
     'bull:jobs:meta-paused',
     'bull:jobs:id',
     'bull:jobs:delayed',
     'bull:jobs:priority',
     'bull:jobs:',
     '',
     '__default__',
     '{"data":"muny"}',
     '{"attempts":1,"delay":0,"timestamp":1568792004594}',
     '1568792004594',
     '0',
     '0',
     '0',
     'LPUSH',
     '4fc02f94-d198-4353-b1b3-8da40399a9c5' ] } }

任何猜测为什么会这样?即使我这样做了,它也会抛出未处理的承诺拒绝,这种行为是否仅适用于 Windows?

标签: node.jsredispromise

解决方案


如我所见,您正在使用redis 2.4.6但根据文档

EVALSHA sha1 numkeys key [key ...] arg [arg ...]
Available since 2.6.0.

所以,这就是抛出这个错误的原因。

现在,基本上如果你找不到适用于 Windows 的 redis 二进制文件,你可以从这里下载 3.2.1


推荐阅读