我需要生成不同的端口号,以便在不同的进程中使用,因此我正在考虑使用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,这样端口就不会太大。
问题是,由于这个函数将被许多进程同时调用,我是否需要使它更原子化?还是有更好的办法?

最佳答案

.incr.del之间存在竞争条件。如果当当前值高于.incr时,多个进程同时调用200,则您将得到多个高于DEFAULT_PORT + 200的端口。这是个问题吗?也许吧。取决于你到底在做什么。我想你很好。

关于node.js - 使用redis维护循环的数字序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35656967/

10-15 10:05