Leaf:开源ID生成器

0.144字数 618阅读 236

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

终身程序员小松哥

推荐阅读更多精彩内容