13位纯数字订单号生成 - java
2021-02-15 16:20
标签:访问 lan system 机器 最大 value tom 订单号 current 需求背景,系统之前的订单号是用毫秒时间戳作为订单号。 以下是改造代码 这段订单生成代码支持 在有十台机器的情况下,能满足最大10000 TPS。 缺点 13位纯数字订单号生成 - java 标签:访问 lan system 机器 最大 value tom 订单号 current 原文地址:https://www.cnblogs.com/virde/p/13_lenght_orderno_generator.html
并发量大时会出现很多重复的订单号,因为需要改造。
改造的要求是仍使用13位纯数字,支持线上三台机器最大1000TPS并发访问量。static class Generator13{
public final static String machineCode13 = "0";
private final static AtomicInteger sub = new AtomicInteger(0);
public static String make(){
StringBuffer sb = new StringBuffer();
sb.append(machineCode13);
long timestamp = System.currentTimeMillis()/1000;
sb.append((timestamp+"").substring(1));
int subValue = sub.incrementAndGet();
if(subValue > 999){
sub.getAndSet(0);
return make();
}
if(subValue
单台最大TPS1000,
最大10台机器并发,
3.17年内无重复订单号
远远超出了现有的并发量
单台最大1000TPS,如果某个瞬间超出1000TPS,就必定会有重复订单号存在。
因为订单号第一位作为机器码,有泄露非业务信息的情况,但同时也方便了查询日志。
文章标题:13位纯数字订单号生成 - java
文章链接:http://soscw.com/index.php/essay/55728.html