...
|
...
|
@@ -7,11 +7,23 @@ import lombok.Data; |
|
|
* <pre>
|
|
|
* 生成订单号bit元数据
|
|
|
* 订单号:
|
|
|
* 2位: 类型(标识是卖家订单号or买家订单号)
|
|
|
* 2位: 类型(标识是卖家订单号or买家订单号)
|
|
|
* 30位: 时间戳(秒级时间) 2的30次方/60/6024/365=34,也就是说可以用30年
|
|
|
* 10位: 序列号, 也就是说 每秒支持1K多的id
|
|
|
* 3位: 服务节点,支持8个服务节点
|
|
|
* </pre>
|
|
|
* 🔽
|
|
|
* 机器号3位不够用,序列号:一台机器一个秒级内不太可能达到10位数量的订单位数过多 ==> 将序列号的右2位变成机器位
|
|
|
* 序列号变8位,机器号变5位
|
|
|
* 🔽
|
|
|
* <pre>
|
|
|
* 生成订单号bit元数据
|
|
|
* 订单号:
|
|
|
* 2位: 类型(标识是卖家订单号or买家订单号)
|
|
|
* 30位: 时间戳(秒级时间) 2的30次方/60/6024/365=34,也就是说可以用30年
|
|
|
* 8位: 序列号, 也就是说 每秒支持2的8次方的订单号
|
|
|
* 5位: 服务节点,支持32个服务节点
|
|
|
* </pre>
|
|
|
*/
|
|
|
@Data
|
|
|
public class CodeBitMeta {
|
...
|
...
|
@@ -30,12 +42,12 @@ public class CodeBitMeta { |
|
|
/**
|
|
|
* 序列号
|
|
|
*/
|
|
|
private byte seqBits = 10;
|
|
|
private byte seqBits = 8;
|
|
|
|
|
|
/**
|
|
|
* 机器位
|
|
|
*/
|
|
|
private byte machineBits = 3;
|
|
|
private byte machineBits = 5;
|
|
|
|
|
|
// 最右边长度为machineBits位为1,其他为0
|
|
|
public long getMachineBitsMask() {
|
...
|
...
|
|