使用redis维护循环的数字序列

时间:2016-02-26 16:31:53

标签: node.js redis

我需要生成不同的端口号以在不同的进程中使用,因此我考虑使用redis来维护循环的数字列表,如下所示:

function getNextPort(callback) {
  var DEFAULT_PORT = 10245;
  client.incr('next_port_incr', function(err, value) {
    if (value > 200) {
      client.del('next_port_incr');
    }
    var port = DEFAULT_PORT + value;
    callback(port);
  });
});

这样,每次拨打getNextPort我都可以获得一个新端口:10246,10247,10248,......并在200次后返回10246,这样端口就不会太大。

问题是,由于许多进程会同时调用此函数,我是否需要使其更多 atomic ?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

.incr.del之间存在竞争条件。如果多个进程在当前值高于.incr的同时调用200,那么您将使用高于DEFAULT_PORT + 200的多个端口。这是一个问题吗?也许。取决于你究竟在做什么。我想你没事。