基于twitter的雪花算法生成不重复id

一、简介

在很多业务场景中,在单台机器或者由多台机器构成的分布式场景中,我们需要生成全局唯一的id。

在这里,将介绍基于twitter的雪花算法,生成全局的、唯一的、基于时间排序的、基本有序的id生成方法。

二、twitter雪花算法的原理

twitter的雪花算法,是将id按二进制比特位切割,不同的位区间,表示不同的含义,也即是不同位区间

的值生成方式不同,从而生成唯一的id。

如位区间可分为时间位区间、集群位区间、机器位区间、自增位区间,这样可在不同时间内、不同集群、

不同机器间,生成全局唯一的id。

三、twitter雪花算法的实例

在此以生成64位(即long型)为例进行介绍(其实区间位可以根据具体的业务需要自行指定)。

1、位区间化分

最高位(即第64位,从右向左数)为符号位,不使用;

41位(第23位到第63位)为时间位,可使用个数为2199023255551个,以毫秒为单位,大约69.5年;

5位(第18位到第22位)为集群位,可使用个数为32个;

5位(第13位到第17位)为机器位,可使用个数为32个;

12位(第1位到第12位)为序列号位,即是从0开始自增,可使用个数为4096个;

2、确定时间位开始计算的时间点

本例以2017-10-12 00:00:00开始计时,那么过去掉的时间(从1970-01-01 00:00:00开始)的毫秒数

为1507737600000,取时间时需要减去这段时间。

四、代码实例

/**
 * 采用twitter的雪花算法,生成有一定顺序且不重复的id,结果类型为64位的long型
 */
public class SnowflakeIdGen {
    //集群id
    private long datacenterId;
    //机器id
    private long workerId;
    //序列号
    private long sequenceId;

    //集群id的bit位数
    private long datacenterIdBits = 5L;
    //机器id的bit位数
    private long workerIdBits = 5L;
    //序列号的bit位数
    private long sequenceIdBits = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值