小编Xed*_*iDC的帖子

编写一个简单的 Node redis 循环的更好方法(使用 ioredis)?

所以,我很长一段时间都在学习其他语言的 JS/Node 方式。

我有一个从 redis 通道读取的微型微服务,将它临时存储在一个工作通道中,完成工作,删除它,然后继续前进。如果频道中有更多内容,它会立即重新运行。如果没有,它会设置超时并在 1 秒后再次检查。

它工作正常......但超时轮询似乎不是解决这个问题的“正确”方法。而且我还没有找到太多关于使用 BRPOPLPUSH 尝试阻止(与 RPOPLPUSH 相比)并在 Node 中等待...或其他类似选项的信息。(Pub/Sub 不是这里的一个选项......这是唯一的侦听器,它可能并不总是在侦听。)

这是我正在做的事情的简短本质:

var Redis = require('ioredis');
var redis = new Redis();

var redisLoop = function () {
    redis.rpoplpush('channel', 'channel-working').then(function (result) {
        if (result) {
            processJob(result); //do stuff

            //delete the item from the working channel, and check for another item
            redis.lrem('channel-working', 1, result).then(function (result) { });
            redisLoop();
        } else {
            //no items, wait 1 second and try again
            setTimeout(redisLoop, 1000);
        }
    });
};

redisLoop();
Run Code Online (Sandbox Code Playgroud)

我觉得我错过了一些非常明显的东西。谢谢!

redis node.js node-redis

4
推荐指数
1
解决办法
1599
查看次数

标签 统计

node-redis ×1

node.js ×1

redis ×1