我需要生成不同的端口号以在不同的进程中使用,因此我考虑使用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 ?或者有更好的方法吗?
答案 0 :(得分:0)
.incr
和.del
之间存在竞争条件。如果多个进程在当前值高于.incr
的同时调用200
,那么您将使用高于DEFAULT_PORT + 200
的多个端口。这是一个问题吗?也许。取决于你究竟在做什么。我想你没事。