随着项目用户数量的扩大,高并发随之而来。那么如何在当前系统生成唯一编号呢?

一台数据库可以用自增,集群呢?当然也有随之的解决方案,但是最好的还是在项目生成了唯一的编号再插入到数据库。而不是数据库插入了再返回来,因为这中间多了一步查询的过程。

当然很多人会讲用这个那个技术,比如 redis 等等,当然能做到。你redis研究的很深,集成事务等等。但是又怎么样呢?redis最擅长的还是 key—value,每秒的吞吐量有10万,但是集成了事务等等有吗?肯定没有。

你别忘了这是个算法问题,你就没想想这个问题要怎么实现,细节。这是一个简单的问题,不需要涉及到高等数学。

下面是我生成编号的一个类。

思路:首先获取 年月日时分秒毫秒的一个时间戳(格式很规范,这样生成的编号特别是订单一目了然),再在这一毫秒内对唯一做一个区别。就是一个编号哪来的那么复杂。


import java.text.SimpleDateFormat;import java.util.Date;import java.util.UUID;

/**         * Title: 生成UUID */      public class CodecUtil {

   private static Integer number;//唯一数字,集群第一台=0,第二台=200000,第三台=400000   private static int maxNum=200000;//最大值,集群第一台=200000,第二台=400000,第三台=600000   private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");//年月日格式

   /**    * uuid生成没有 — 的编号    * @return    */   public static String createUUID(){      String uuid = UUID.randomUUID().toString();      return uuid.replaceAll("\\-", "");   }

   /**    * 生成订单编号 17+ 位数    *  思路:一个业务在1毫秒内并发的数量有多少,有一万那真是顶天了,意味着 一秒 有1000万的并发。kafaka,redis的性能不过10万,那我把 number的上限设置成20 万,那就是一秒200000*1000=2亿的并发,不够再集群    *  宕机了,进程死了,这个跟程序没有关系。你别忘了前面精确到毫秒的17位数,我们只关心一毫秒内的并发问题    * @return    */   public static String createOrderId(){      number++;//唯一数字自增      if(number>=maxNum){ // 值的上限,超过就归零         number=maxNum-200000;      }      return sdf.format(new Date())+number;//返回时间+一毫秒内唯一数字的编号,区分机器可以加字母ABC...   }

}
 

java生成订单编号的更多相关文章

  1. JAVA生成订单编号工具类

    JAVA根据时间戳和随机数方式生成订单编号工具类 OrderUtils.java package com.util; import java.text.DateFormat; import java. ...

  2. Loadrunner时间函数、用时间生成订单编号例子

    Loadrunner中取时间函数.用时间函数生成订单编号例子: <如要转载,请注明网络来源及作者:Cheers_Lee> 问题的提出: (1)有时候在Loadrunner中用C语言设计脚本 ...

  3. Java 编程 订单、支付、退款、发货、退货等编号主动生成类

    订单.支付.退款.发货.退货等编号主动生成类 在商城网站中,订单编号的自动生成,ERP中各个单据的编号自动生成,都可以按照一下的方式来自动生成. 第一步:定义常量订单编号前缀.订单编号起始数.订单编号 ...

  4. 编写Java程序,模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号。

    查看本章节 查看作业目录 需求说明: 模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号.而部分电子商务网站在数据高峰期时,一毫秒可能需要处理近千笔的订单 现在简单模拟 ...

  5. 分布式系统-主键唯一id,订单编号生成-雪花算法-SnowFlake

    分布式系统下 我们每台设备(分布式系统-独立的应用空间-或者docker环境) * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作 ...

  6. PHP + Redis 生成自定义订单编号

    /** * 订单编号生成规则 * 14位 = 6位时间 + 5位自增 + 3位ID * @param string $prefix 前缀: 默认为order * @param int $userId ...

  7. java生成解析xml的另外两种方法JAXB

     JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反 ...

  8. 生成订单:三个表(Products,Orders,OrderItem)

    1.有三个表(Product上,Orders,OrderItem) 分别创建对应的三个实体类 OrderItem中有外键Order_id 参考Orders中的id :Product_id参考Produ ...

  9. Java生成CSV文件实例详解

    本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils ...

随机推荐

  1. 【转】Jperf2.0下载及使用方法介绍

    iPerf图形化工具Jperf图文使用教程   在前文介绍iPerf时,我们就提到了Jperf这款软件,因为iPerf没有图形界面,操作起来不是太方便,而Jperf则是将iPerf命令行图形化的JAV ...

  2. Pthon魔术方法(Magic Methods)-上下文管理

    Pthon魔术方法(Magic Methods)-上下文管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.上下文管理方法 __enter__: 进入与此对象相关的上下文.如果 ...

  3. oracle plsql 实现apriori算法

    对apriori关联关系算法研究了一段时间,网上能搜到的例子,大部分是python写的,数据集长得像下面这样: [[I1,I2,I5],[I2,I4],[I2,I3],[I1,I2,I4],[I1,I ...

  4. linux中添加自定义命令

    centos下设置alias别名,比较简单,例如: vim /root/.bashrc addalias rm='rm -i' Linux alias设置指令的别名命令详解 功能说明:设置指令的别名. ...

  5. hive日期转换函数2

    转自大神 http://www.oratea.net/?p=944 无论做什么数据,都离不开日期函数的使用. 这里转载一下Hive的日期函数的使用,写的相当完整. 日期函数UNIX时间戳转日期函数: ...

  6. 【Servlet】基于Jsp的微信Oauth2认证

    作者:yongh701 挂载到微信服务器上的应用程序,能够通过微信Oauth2认证,能够抓取到用户的微信信息,当然,你首先要通过微信的帐号资质审核. 一.基本思想 二.基本过程 1.登陆微信的公众平台 ...

  7. 长为N的数组,元素范围是0-N-1,其中只有一个数是重复的,找出这个重复元素

    思路:如果限制空间复杂度为O(1),我们就无法采用哈希表的方法去求解.题目中数组中所以数字都在范围[0, N-1],因此哈希表的大小为N即可.因此我们实际要做的就是对N个范围为0到N-1的数进行哈希, ...

  8. linux 读取文件

    linux读取文件是经常要用到的操作,以下示例(说明看注释): #读取文件snlist.txt中的每一行内容赋给sn变量 while read sn do echo ">>> ...

  9. 基于Centos7+Flask+Nginx+uWSGI+Python3的服务器网页搭建教程

    之前完成了贴吧签到系统的搭建,笔者想将这个功能分享给更多人使用,所以尝试搭建了一个网页,一路遇到了很多问题,最终解决了,记录下过程分享给大家 首先安装 uWSGI ,和 Nginx 配套使用,具体用途 ...

  10. learning java Charset 查看支持的字符集类型

    import java.nio.charset.Charset; import java.util.SortedMap; public class CharsetTest { public stati ...