本文介绍: 设计一个ID生成器
雪花算法
生成的结果是一个int64
的数据。核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号,意味着每个节点再每毫秒可以产生 4096 个 ID, 最后还有一个符号位,永远是0.
优点: 优点是毫秒书在高位,自增序列在低位,整个ID是趋势递增的。不依赖数据库等第三方系统,一服务的方式部署,稳定性更高,生成ID的性能也是非常高的。可以根据自身业务特性分配bit位,非常灵活。
缺点: 强依赖机器时钟,如果机器上时钟回拨,会导致号重复或者服务会处于不可用状态。
Redis生成ID
因为 Redis 是单线程的,也可以用来生成全局唯一ID。可以用Redis的原子操作INCR和INCRBY来实现。使用Redis集群来获取更高的吞吐量。假如一个集群中有5台Redis,可以初始化每台Redis的值分别是1,2,3,4,5,步长都是5,各Redis生成的ID如下:A: 1,6,11,16; B: 2,7,12,17; C: 3,8,13,18; D: 4,9,14,19; E: 5,10,15,29。负载到哪台机器提前定好,未来很难做修改。3-5台服务器基本能安祖需求,但步长和初始值一定需要事先确定,使用Redis集群也可以解决单点故障问题。
**优点:**不依赖数据库,灵活方便,且性能优于数据库,数字ID天然排序,对分页或需要排序的结果很有帮助。
**缺点:**如果系统中没有Redis,需要引入新的组件,增加系统复杂度;需要编码和配置的工作量比较大。
UUID
美团Leaf
Leaf-segment
tip biz_tag
Leaf-snowflake
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。