码迷,mamicode.com
首页 > 编程语言 > 详细

13位纯数字订单号生成 - java

时间:2020-04-16 15:05:37      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:访问   lan   system   机器   最大   value   tom   订单号   current   

需求背景,系统之前的订单号是用毫秒时间戳作为订单号。
并发量大时会出现很多重复的订单号,因为需要改造。
改造的要求是仍使用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<10){
                sb.append("00");
            } else if(subValue<100){
                sb.append("0");
            }
            sb.append(subValue);
            return sb.toString();
        }
    }

这段订单生成代码支持
单台最大TPS1000,
最大10台机器并发,
3.17年内无重复订单号

在有十台机器的情况下,能满足最大10000 TPS。
远远超出了现有的并发量

缺点
单台最大1000TPS,如果某个瞬间超出1000TPS,就必定会有重复订单号存在。
因为订单号第一位作为机器码,有泄露非业务信息的情况,但同时也方便了查询日志。

13位纯数字订单号生成 - java

标签:访问   lan   system   机器   最大   value   tom   订单号   current   

原文地址:https://www.cnblogs.com/virde/p/13_lenght_orderno_generator.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!