1、snowflake-id外掛程式
import snowflakeid from "snowflake-id";
const guid = num => ;
2、原生使用
var snowflake = /** @class */ (function()
if(this.datacenterid > this.maxdatacenterid || this.datacenterid < 0)
this.workerid = bigint(_workerid);
this.datacenterid = bigint(_datacenterid);
this.sequence = bigint(_sequence);
} snowflake.prototype.tilnextmillis = function(lasttimestamp)
return bigint(timestamp);
}; snowflake.prototype.timegen = function() ;
snowflake.prototype.nextid = function()
if(this.lasttimestamp === timestamp)
} else
this.lasttimestamp = timestamp;
return((timestamp - this.twepoch) << this.timestampleftshift) |
(this.datacenterid << this.datacenteridshift) |
(this.workerid << this.workeridshift) |
this.sequence;
}; return snowflake;
}());
console.log(new snowflake(1n, 1n, 0n).nextid());
//1141531990672150528n
控制台輸出1141531990672150528n為bigint格式, .tostring()轉為字串格式即可
3、es6使用
import bigint from "big-integer";
const guid = () =>
if (this.datacenterid > this.maxdatacenterid || this.datacenterid < 0)
this.workerid = _workerid;
this.datacenterid = _datacenterid;
this.sequence = _sequence;
}snowflake.prototype.tilnextmillis = function(lasttimestamp)
return timestamp;
};snowflake.prototype.timegen = function() ;
snowflake.prototype.nextid = function()
if (this.lasttimestamp === timestamp)
} else
this.lasttimestamp = timestamp;
var shiftnum =
(this.datacenterid << this.datacenteridshift) |
(this.workerid << this.workeridshift) |
this.sequence; // datacenterid:1,workerid:1,sequence:0 shiftnum:135168
var nfirst = new bigint(string(timestamp - this.twepoch), 10);
nfirst = nfirst.shiftleft(this.timestampleftshift);
var nnextid = nfirst.or(new bigint(string(shiftnum), 10)).tostring(10);
return nnextid;
};return snowflake;
})();
return new snowflake(1, 1, 0).nextid();
};
guid()即可呼叫
4、多次重複呼叫出現一樣id的bug
修改如下
import snowflakeid from "snowflake-id";
const guid = num =>
return num ? arr : snowflake.generate();
};
單個呼叫 guid()
n個呼叫 guid(n)
文件
《演算法競賽高階指南》 雪花雪花雪花
有n片雪花,每片雪花由六個角組成,每個角都有長度。第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,ai,6。因為雪花的形狀是封閉的環形,所以從任何乙個角開始順時針或逆時針往後記錄長度,得到的六元組都代表形狀相同的雪花。例如ai,1,ai,2,ai,6和ai,2,ai,3,ai,6...
《演算法 雪花演算法》
一 概述 snowflake 演算法 是 twitter 開源的分布式 id 生成演算法。應用場景 高效能的產生不重複id,支援集群的橫向擴充套件。二 原理 其核心思想就是 使用乙個 64 bit 的 long 型的數字作為全域性唯一 id。在分布式系統中的應用十分廣泛,且id 引入了時間戳,基本上...
雪花演算法詳解
前言 雪花演算法是用來在分布式場景下生成唯一id的。敘述 雪花演算法簡單描述 最高位是符號位,始終為0,不可用。41位的時間序列,精確到毫秒級,41位的長度可以使用69年。時間位還有乙個很重要的作用是可以根據時間進行排序。10位的機器標識,10位的長度最多支援部署1024個節點。12位的計數序列號,...