订单号-生成算法
基于 snowflake 算法,根据业务场景,做适应性调整:
block说明 |
bits |
拟采用的实现方式 |
1 最高位 |
1 |
暂未使用(置0) |
2 时间戳 |
28 |
采用unix 毫秒数 (millsOfDay) bin(24x60x60x1000) = '0b101-0010-0110-0101-1100-0000-0000' 需要27bit |
3 机器ID |
8 |
为支持分布式,加入机器ID。现阶段机器不会太多,可采用1个字节标识(如采用机器IP最后2字节,异或为1个字节) |
4 管理员ID |
8 |
取管理员ID低 8位 |
5 用户ID |
8 |
取用户ID 低8位 |
最后,在订单编号上加上 8 个数字的日期前缀:YYYYMMDD
orderSN 总长度为27位数字(8+19),样例: 202105171838043898712414209
PS:int64 格式化为19位的10进制数,不足19位补充前缀0