Skip to content

Latest commit

 

History

History

study-id-generator

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

study-id-generator

https://tech.meituan.com/2017/04/21/mt-leaf.html

常用方案

  • UUID
  • snowflake
  • Redis Id
  • Leaf

UUID

包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等

优点

本地生成ID,不需要进行远程调用,时延低,性能高。

缺点

UUID过长,16字节128位,通常以36长度的字符串表示,很多场景不适用,比如用UUID做数据库索引字段。

没有排序,无法保证趋势递增

snowflake

1位不用,为 0

41位的时间序列(精确到毫秒,41位的长度可以使用69年)

10位的机器标识(10位的长度最多支持部署1024个节点)

12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)

*优点:*

时间戳在高位,自增序列在低位,整个ID是趋势递增的,按照时间有序。

性能高,每秒可生成几百万ID

可以根据自身业务需求灵活调整bit位划分,满足不同需求。

*缺点:*

强依赖时钟,如果主机时间回拨,则会造成重复ID,会产生ID虽然有序,但是****不连续****

在单机上是递增的,但是由于涉及到分布式环境,每台机器上的时钟不可能完全同步,有时候会出现不是全局递增的情况。

Redis ID

当使用数据库来生成ID性能不够要求的时候,我们可以尝试使用Redis来生成ID。这****主要依赖于Redis是单线程的,所以也可以用生成全局唯一的ID****。可以用Redis的原子操作 INCR和INCRBY来实现。

优点:

1)不依赖于数据库,灵活方便,且性能优于数据库。

2)数字ID天然排序,对分页或者需要排序的结果很有帮助。

缺点:

1)如果系统中没有Redis,还需要引入新的组件,增加系统复杂度。

2)需要编码和配置的工作量比较大。