Js Snowflake 雪花演算法 生成隨機ID

2021-09-24 14:39:49 字數 3185 閱讀 7630

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位的計數序列號,...