为什么要用分布式id
随着业务的增长,后期可能会对数据库进行拆分的操作,通过数据库中间间链接。如果数据库表中的id采取的是自增策略,则会产生重复的id。使用分布式id便是为了避免此类现象。
雪花算法
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0
基于MyBatisPlus实现分布式id
mybatis-plus已经集成了雪花算法,完成以下两步即可在项目中集成雪花算法
- 第一:在实体类中的id上加入如下配置,指定类型为id_worker
点击查看代码
@TableId(value = "id",type = IdType.ID_WORKER)
private Long id;
点击查看代码
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
# 设置别名包扫描路径,通过该属性可以给包中的类注册别名
type-aliases-package: com.wzh.model.article.pojos
global-config:
datacenter-id: 1
workerId: 1