雪花算法

1 篇文章 0 订阅
1 篇文章 0 订阅

雪花算法

解决分布式全局唯一ID的方法有:

- UUID

UUID做全局ID的弊端:UUID是由数字加字母的形式组成,无法保持递增,它使得聚簇索引(主键值和行数据存放在一起)的插入变得完全随机,就会导致数据库无法快速写入

- 雪花算法

雪花算法他会生成一个64bit的递增的长整型数字,一般情况下第一位表示符号(+/-)前41bit表示时间戳,后10bit表示机器码,最后12bit表示序列号。

时间戳: 格林威治时间1970年1月1日 00:00:00至今 生成一
个64bit的长整型数据,雪花算法取后41bit,可以表示69年
机器码: 取其中10bit,可以表示1024个服务器
序列号: 取左后的12bit,在同一个服务器同一毫秒内可以产生4096个序列号

- 雪花算法实现

1,先获取当前的时间戳,用当前的时间戳和前一个id生成时的时间戳作比较,如果相同说明是同一毫秒的ID,此时序列号加1,如果同一毫秒超过了4096,就要等下一毫秒
2,将当前的时间戳左移(<<)22位,机器码左移(<<)12位,序列号不变
3,将三个参数做位或(|)运算生成 64bit的长整型数字ID

**

  • 总结

**
雪花算法的优点:根据时间递增,支持分布式部署
雪花算法的缺点:严重依赖服务器的时钟,如果出现服务时钟回拨会导致ID重复

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值