我在用nodejs。
我不断收到服务器的请求。
我添加了一些变量,比如createdTime,并保存到数据库中。
当我按createdTime排序数据时,在某些情况下它是不可靠的,它会重复
我如何区分它们?
我不想数请求。
我不喜欢更改时间戳的格式。
var createdTime=新日期().getTime();

最佳答案

这里有一种将计数器与当前时间相结合的方法,允许您在同一ms内有多达1000个单独的事务,这些事务都是唯一编号的,但仍然是基于时间的值。
下面是一个工作片段来说明:

// this guarantees a unique time-based id
// as long as you don't have more than 1000
// requests in the same ms
var getTransactionID = (function() {
  var lastTime, counter = 0;
  return function() {
    var now = Date.now();
    if (now !== lastTime) {
      lastTime = now;
      counter = 0;
    } else {
      ++counter;
    }
    return (now * 1000) + counter;
  }
})();

for (var i = 0; i < 100; i++) {
    document.write(getTransactionID() + "<br>");
}

如果您想要可能跨集群工作的东西,可以使用process.hrtime()来使用高分辨率计时器而不是计数器,然后使id成为一个字符串,如果需要,可以将其解析为相对时间。因为这需要node.js,所以我不能在浏览器中制作一个工作片段,但这里有一个想法:
// this makes a unique time-based id
function getTransactionID () {
    var now = Date.now();
    var hrtime = process.hrtime();
    return now + "." + ((hrtime[0] * 1e9) + hrtime[1]);
}

08-15 17:43