1、雪花算法
固定值:1位,最高位是符号位,0 表示正,1 表示负,固定为 0,如果是 1 就是负数了。
时间戳:占用 41 位,表示生成的时间戳,精确到毫秒级。
机器ID:共 5 位,表示生成ID的机器的唯一标识。
数据中台ID:共 5 位,
累加数ID (共 12 位,最大支持 2 的 12 次方)
雪花ID:固定值 + 时间戳 + 机器ID + 数据中台ID + 累加数ID
雪花算法必须是 64 位:因为雪花算法返回的是一个 long 类型的值,换算成二进制就是最大 64 位!
机器ID:使用当前机器的IP地址。
数据中台ID:使用IP地址所在的地理位置。比如某个IP地理位置为成都,然后在数据库表中把成都的数据中台ID设置为123456,则在成都的机器所有的数据中台ID都为123456。
2、单号生成器
2.1 单号生成
(前缀 + 时间 + 流水号) 拼接起来。是一个字符串
前缀:随机的前缀,比如N170DBRK
时间:格式为:yyMMdd,或者yy、yyyy、yyyyMM、yyyyMMdd等等。
流水号:按照规则生成唯一的流水号。
2.2 具体做法
流水号生成规则:最后一次生成的流水号,存放数据库中。下次生成流水号时,从数据库中拿出来,以数据库的流水号为基础进行递增,以确保分布式情况下流水号的唯一性。
流水号递增规则:相邻两个流水号使用相同步长(或者随机步长)进行递增。
注:步长就是相邻的两个数的绝对值。比如相邻的流水号190、200,步长为10。