全局唯一性ID生成(雪花算法)

 雪花算法应用于分布式生成有序的全局唯一性ID,由64个bit位组成。

第一个部分,是1个bit:0,因为ID默认为整数,符号位为0代表为整数。

第二个部分,是41个bit:表示的是时间戳,单位是毫秒(ms),2^41-1ms等于69年

第三个部分,是5个bit:表示为机房ID

第四个部分,是5个bit:表示为机器ID

第五个部分,是12个bit:表示的是序号,2^12-1=4095

整体含义为:某一时刻(第二部分),在某一机房 (第三部分),在某一机器(第四部分),生成的ID序号(第五部分)

算法伪代码:

获取当前时间戳 a
    if(a < 上一次的时间戳)   
        抛出异常
    if(a == 上一次的时间戳)
    /**
    *代表是同一毫秒内的生成的雪花ID
    *当后12位bit生成到序列号为最大值4095时
    *源码中使用的是  sequence=(sequence+1)& MAX_SEQUENE 
    * sequence为当前序列号 MAX_SEQUENE为序列号最大值4095 此处都为二进制表示
    */
        if(sequence == 0L)
            获取下一个时间戳,赋值给当前时间戳
    else
        序列号sequence 设置为0L
    //最后 通过位运算 将各个部分组装起来

时钟回拨问题:

1.使用懒惰解决办法,等待<5ms的时间,再进行生成

2.备份服务器的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值