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结尾的,保证后续取模操作能够正常(比如对于数据库分表操作的)
我的注解版: