https://tech.meituan.com/2017/04/21/mt-leaf.html
- UUID
- snowflake
- Redis Id
- Leaf
包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等
优点
本地生成ID,不需要进行远程调用,时延低,性能高。
缺点
UUID过长,16字节128位,通常以36长度的字符串表示,很多场景不适用,比如用UUID做数据库索引字段。
没有排序,无法保证趋势递增
1位不用,为 0
41位的时间序列(精确到毫秒,41位的长度可以使用69年)
10位的机器标识(10位的长度最多支持部署1024个节点)
12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
*优点:*
时间戳在高位,自增序列在低位,整个ID是趋势递增的,按照时间有序。
性能高,每秒可生成几百万ID。
可以根据自身业务需求灵活调整bit位划分,满足不同需求。
*缺点:*
强依赖时钟,如果主机时间回拨,则会造成重复ID,会产生ID虽然有序,但是****不连续****
在单机上是递增的,但是由于涉及到分布式环境,每台机器上的时钟不可能完全同步,有时候会出现不是全局递增的情况。
当使用数据库来生成ID性能不够要求的时候,我们可以尝试使用Redis来生成ID。这****主要依赖于Redis是单线程的,所以也可以用生成全局唯一的ID****。可以用Redis的原子操作 INCR和INCRBY来实现。
优点:
1)不依赖于数据库,灵活方便,且性能优于数据库。
2)数字ID天然排序,对分页或者需要排序的结果很有帮助。
缺点:
1)如果系统中没有Redis,还需要引入新的组件,增加系统复杂度。
2)需要编码和配置的工作量比较大。