tinyid(
https://github.com/didi/tinyid)和Leaf(
https://github.com/Meituan-Dianping/Leaf)都是分布式Id生成器。
目前Id生成器大體有2類算法:
1. snowflake算法
2. 基於數據庫的號段算法
各自算法的原理這里不介紹了,代碼都很簡單, 這里說一個細節
Leaf項目中 關於snowflake算法實現上,在每秒開始的時候,sequence並不是從0開始的,而是在100內隨機了一個數字,這種可以避免在請求比較少的情況下每次獲取的ID都是以000結尾的,保證后續取模操作能夠正常(比如對於數據庫分表操作的)
我的注解版: