mysql模拟雪花算法_雪花算法(07)雪花算法最终版

本文介绍了雪花算法的最终版,强调了位运算与直接数字定义在编译结果上的等价性,并展示了如何定义和使用相关常量。通过修改初始部分长度,算法能自动调整,确保灵活性。文章还讨论了主程序和毫秒内序列的处理,并测试了生成大量ID的效率。
摘要由CSDN通过智能技术生成


雪花算法初步完成后,我们讨论了几个位运算的写法,大家知道雪花算法一旦确定后,很多数字都是定死的,比如机器占多少位,或者时间向左位移多少,这些在算法具体逻辑确定后就不会变了。那么写成最后的数字和用位运算计算出来有什么区别呢?
其实没有区别,我们的程序分为编译期和运行期,我们直接把程序编译好,然后查看class文件,就会发现,两种写法编译结果是一样的。用位运算计算出来只是更加灵活而已,定义很多死的数字也容易写错,后期维护混乱。所以,下面我们来一个最终版,首先看基本的几个常量定义:

![](https://img2018.cnblogs.com/blog/1765723/201908/1765723-20190815133515908-1520613647.png)

然后看时间部分的常量:

5ebd01755bd5ac5d5d085b215c2670b7.png

再看机器信息的常量:

3542e4bd764da687b5500154b3a92399.png

最后看毫秒内序列的常量定义:

6dabeebfc65b0e56bac37239e59c457a.png

上面的常量中,只要修改最开始的四个部分的长度,下面的所有常量都会自动修改。

再来看一下主程序:

aa95b0304d2f5add8de4fd6c40bb9961.png

注意上面判断统一毫秒内序列的变化。其它辅助方法都没有什么变化,不再讨论。现在我们再看看编译完后生成的class文件:

56a03682028ef42046690d6d29c7dc5e.png

可以看到编译后的文件其实就是最终定义了死的常数。包括主程序也是一样:

1f1bc20c8b1f465ce3d6f300af2f799b.png

上面就是雪花算法的最终版!!!

最后来测试一下效率,我们来生成300万个id看看花费的时间:

c5f9dd96a51dce670d3e4e300aee3559.png

原文出处:https://www.cnblogs.com/guos/p/11357422.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值