分布式ID生成器

Plan A:号段模式

  1. 建表
CREATE TABLE `leaf_segment` (
  `biz_tag` varchar(128) NOT NULL COMMENT '业务类型',
  `max_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'biz_tag目前所被分配的ID号段最大值',
  `step` int(11) NOT NULL DEFAULT '1000' COMMENT '每次分配号段的步长',
  `version` int(11) NOT NULL DEFAULT '1' COMMENT '版本号',
  `desc` varchar(256) DEFAULT NULL COMMENT '描述',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`biz_tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分布式订单分发器';
  1. 初始化
insert ignore into leaf_segment (`biz_tag`,`desc`) VALUES ('test','just for test');
  1. 查询并缓存ID号段,利用版本号更新号段
select max_id,step,version from leaf_segment where `biz_tag` = 'test';
  1. 更新号段
update leaf_segment set `max_id` = `max_id` + `step`,`version` = `version`+1 where version = 1;

Plan B:snowflake

0-00000000 00000000 00000000 00000000 00000000 0-00000000 00-00000000 0000
1+41+10+12(不动位+时间戳+机器标识+计数顺序号)时钟回拨问题
posted @ 2022-07-06 15:12  haha瓜  阅读(38)  评论(0)    收藏  举报