SnowFlake雪花算法(标题重复率高,建议修改提高曝光,这样应该不高了吧)

SnowFlake算法是一种由Twitter提出的分布式ID生成策略,它生成的ID是64位long型,包括1位符号位、41位时间戳、10位机器ID和12位序列号。算法保证在70年内和1024个机器节点下,每个节点每毫秒能生成4096个不重复的ID。文章详细介绍了算法的工作原理,并指出其在时间回拨时可能产生重复ID的缺点。
摘要由CSDN通过智能技术生成

雪花算法

雪花算法是Twitter推出的⼀个⽤于⽣成分布式ID的策略。
雪花算法⽣成的ID是⼀个long型,那么在Java中⼀个long
型是8个字节,算下来是64bit。
在这里插入图片描述
1.符号位:固定为0(0为正数,1位负数)
2.时间戳:单位为毫秒(2的41次方毫秒 约等于70年)
3.机器id:长度为10个字节(前五位为机房id,后五位是机器id,最多支持32*32 = 1024个机器)
4.序列:自增,长度为12个字节(最多支持4096个序列)

也就是说雪花算法最多同时支持1024个机器七十年,每个机器每毫秒生成4096个雪花id不重复

下面就是紧张又刺激的代码环节




public class SnowflakeIdWorker {
   
    // ==============================Fields===========================================
    /** 开始时间截 (2020-03-26) */
    private final long twepoch = 1585183384185L;

    /** 机器id所占的位数 */
    private final long workerIdBits = 5L;

    /** 数据标识id所占的位数 */
    private final long dataCenterIdBits = 5L;

    /** 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) */
    private final long maxWorkerId = -1L ^ (-1L << workerIdBits);

    /** 支持的最大数据标识id,结果是31 */
    private final long maxDataCenterId = -1L ^ (-1L << dataCenterIdBits);

    /** 序列在id中占的位数 */
    private final long sequenceBits = 12L
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值