我需要生成不同的端口号,以便在不同的进程中使用,因此我正在考虑使用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/