Leaf:开源ID生成器

作者: 终生程序员小松哥 | 来源:发表于2019-04-16 14:50 被阅读6次

    Leaf是美团开源的ID生成器

    下载地址:https://github.com/Meituan-Dianping/Leaf

    运行方式:Spring Boot

    ID生成方式:自增(类似数据库自增主键),固定长度随机。

    方式一:固定长度随机

    这个其实才是我关心,因为参与的社交电商项目需要生成随机订单号、交易号、红包号、邀请号...  之前采用了随机生成,再进行碰撞,效率很差。为什么不能直接用数据库自增ID?那相当于明明白白告诉别人:你今天的成交量。而且在我参与的项目里现金红包是可以互相分享并进行使用,如果是用自增ID,别人就可以用了刷红包。不要问我怎么知道的,说起来都是泪。

    回来讲下Leaf中是怎么启用这个功能的。

    1,先安装好zookeeper。

    2,在Leaf中完成配置,配置文件 leaf-server/src/main/resources/leaf.properties

    leaf.snowflake.enable :是否开启snowflake模式false

    leaf.snowflake.zk.address : snowflake模式下的zk地址

    leaf.snowflake.port:snowflake模式下的服务注册端口

    启动后,就可以看到效果。访问以下链接,看下我的效果 。

    http://leaf.devxiaosong.com/api/snowflake/get/test

    项目中把这个称作为snowflake方式,感兴趣可以详细看一下。

    方式二:自增模式

    那是不是直接用数据库的主键自增就可以了?如果考虑到以后要分库、分表,就需要使用分布式自增ID了。

    1,在Leaf中完成配置,配置文件 leaf-server/src/main/resources/leaf.properties

    leaf.segment.enable:是否开启号段模式false

    leaf.jdbc.url:mysql 库地址

    leaf.jdbc.username:mysql 用户名

    leaf.jdbc.password:mysql 密码

    2,在数据库添加数据表并插入一条配置数据:

    CREATETABLE`leaf_alloc` (`biz_tag`varchar(128)NOT NULLDEFAULT'',`max_id`bigint(20)NOT NULLDEFAULT'1',`step`int(11)NOT NULL,`description`varchar(256) DEFAULTNULL,`update_time`timestampNOT NULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,PRIMARY KEY(`biz_tag`)) ENGINE=InnoDB;

    insert intoleaf_alloc(biz_tag, max_id, step, description)values('leaf-segment-test',1,2000,'Test leaf Segment Mode Get Id')

    本质上这是一种利用数据库+内存的方法,所以生成速度远快于纯数据库。

    访问以下链接,看下我的效果 。

    http://leaf.devxiaosong.com/api/segment/get/leaf-segment-test

    终身程序员小松哥

    相关文章

      网友评论

        本文标题:Leaf:开源ID生成器

        本文链接:https://www.haomeiwen.com/subject/uddbwqtx.html