打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java深度模仿支付宝订单号/交易流水号(高性能,不重复)

先看一下支付宝的订单号:2015082600001000040061749694


分析看来:

                前六位数(20150826)是年月日格式化:yyyyMMdd

                中间的8位数(00001000)是:00001000,固定4个0+1000

                在后两位(04):随机生成一个两位数

                在后两位(00):又是固定的两个0

                接下来的6位数是(617496):时分秒的格式化HHmmss

                最后两位是(94):又是随机生成


第一回合直接运行代码:CPU瞬间百分之百



然后优化下把年月日,时分秒分别提取出来,假设1秒钟跑1w次:

  1. public static void main(String[] args) {  
  2.         String date = new SimpleDateFormat("yyyyMMdd").format(new Date());  
  3.         String seconds = new SimpleDateFormat("HHmmss").format(new Date());  
  4.         for (int i = 0; i < 10000; i++) {  
  5.             System.out.println(date+"00001000"+getTwo()+"00"+seconds+getTwo());  
  6.         }  
  7. }  
  1. /** 
  2.      * 产生随机的2位数 
  3.      * @return 
  4.      */  
  5.     public static String getTwo(){  
  6.         Random rad=new Random();  
  7.   
  8.         String result  = rad.nextInt(100) +"";  
  9.   
  10.         if(result.length()==1){  
  11.             result = "0" + result;  
  12.         }  
  13.         return result;  
  14.     }  

再次查看cpu掉了40%,基于目前还未做集群负载的情况下,60%是可以接受的,那么就先告一段落~~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
java中Date与String的相互转化
java中两个Date类型的数据求时间差
Java工程师应该注意的10件事
工作中用到集中java方法
java把日期转化为cron表达式
怎样生成唯一订单号
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服