雪花算法(07)雪花算法最終版



雪花算法初步完成后,我們討論了幾個位運算的寫法,大家知道雪花算法一旦確定后,很多數字都是定死的,比如機器占多少位,或者時間向左位移多少,這些在算法具體邏輯確定后就不會變了。那么寫成最后的數字和用位運算計算出來有什么區別呢?
其實沒有區別,我們的程序分為編譯期和運行期,我們直接把程序編譯好,然后查看class文件,就會發現,兩種寫法編譯結果是一樣的。用位運算計算出來只是更加靈活而已,定義很多死的數字也容易寫錯,后期維護混亂。所以,下面我們來一個最終版,首先看基本的幾個常量定義:
![](https://img2018.cnblogs.com/blog/1765723/201908/1765723-20190815133515908-1520613647.png)

然后看時間部分的常量:


再看機器信息的常量:


最后看毫秒內序列的常量定義:


上面的常量中,只要修改最開始的四個部分的長度,下面的所有常量都會自動修改。




再來看一下主程序:


注意上面判斷統一毫秒內序列的變化。其它輔助方法都沒有什么變化,不再討論。現在我們再看看編譯完后生成的class文件:


可以看到編譯后的文件其實就是最終定義了死的常數。包括主程序也是一樣:


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





最后來測試一下效率,我們來生成300萬個id看看花費的時間:





代碼地址:https://gitee.com/blueses/snowflake-demo 07


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM