# 第09节:ID生成策略领域开发

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!

  • 分支:210920_xfg_IdGenerator (opens new window)
  • 描述:使用雪花算法、阿帕奇工具包 RandomStringUtils、日期拼接,三种方式生成ID,分别用在订单号、策略ID、活动号的生成上。

# 一、开发日志

  • 【说明】从本章节开始,我们会陆续的引入一些基础内容的搭建,包括本章节关于ID的生成、以及后续章节需要引入分库分表、vo2dto方法、Redis等,这些会支撑我们继续开发业务领域中一些需要用到的订单号、活动号生成以及个人用户参与到的抽奖信息落库。
  • 使用策略模式把三种生成ID的算法进行统一包装,由调用方决定使用哪种生成ID的策略。策略模式属于行为模式的一种,一个类的行为或算法可以在运行时进行更改
  • 雪花算法本章节使用的是工具包 hutool 包装好的工具类,一般在实际使用雪花算法时需要做一些优化处理,比如支持时间回拨、支持手工插入、简短生成长度、提升生成速度等。
  • 而日期拼接和随机数工具包生成方式,都需要自己保证唯一性,一般使用此方式生成的ID,都用在单表中,本身可以在数据库配置唯一ID。那为什么不用自增ID,因为自增ID通常容易被外界知晓你的运营数据,以及后续需要做数据迁移到分库分表中都会有些麻烦

# 二、支撑领域

在 domain 领域包下新增支撑领域,ID 的生成服务就放到这个领域下实现。

关于 ID 的生成因为有三种不同 ID 用于在不同的场景下;

  • 订单号:唯一、大量、订单创建时使用、分库分表
  • 活动号:唯一、少量、活动创建时使用、单库单表
  • 策略号:唯一、少量、活动创建时使用、单库单表