雪花算法生成id
结构:64位 = 1位符号位(0) + 41位时间戳 + 5位数据中心ID + 5位机器ID + 12位序列号
时间戳(41位):
记录的是当前时间与一个自定义起始时间(称为epoch)的差值,单位是毫秒。
41位可以表示2^41-1个数字,大约69年。所以,自定义起始时间之后69年内这个算法都是有效的。
数据中心ID(5位):
可以表示2^5=32个不同的数据中心。
机器ID(5位):
可以表示2^5=32台机器。
注意:数据中心ID和机器ID一起用来标识一台唯一的机器,总共可以表示32*32=1024台机器。
序列号(12位):
同一毫秒内产生的不同ID的序列号,从0开始递增。
12位可以表示2^12=4096个序列号,所以同一毫秒内最多生成4096个ID
这些数字是固定的吗?
不是绝对固定的,但行业标准是:
时间戳:41位(69年)
数据中心:5位(32个)
机器ID:5位(32台)
序列号:12位(4096个/毫秒)
你可以根据自己的需求调整,比如:
如果机器很少但并发很高:减少机器位数,增加序列号位数
如果需要更长时间:减少序列号位数,增加时间戳位数