多语言展示
当前在线:333今日阅读:61今日分享:18

怎么生成唯一的订单号

业务需求:订单号不能重复订单号没有规则,即编码规则不运营相关的数据,外部人员无法通过订单ID猜测到订单量。不能被遍历。订单号长度固定,且不能太长易读,易沟通,不要出现数字字母换乱现象生成耗时
工具/原料
1

数据库

2

当前时间戳

方法一:数据库自增长ID
2

优势:无需编肤王码缺陷: 大表不能做水平分表,否则插入删除时容易出现问题高肤罩塑并发下插欠愁入数据需要加入事务机制在业务操作父、子表(关联表)插入时,先要插入父表,再插入子表

方法二: 时间戳+随机数
1

生成方法:当前时间戳+随机数,例如当前时间为23,6位随机数:436273,则生成的ID=2入库前需要检测一下该ID是否已存在.这个在高并发下会有重复的可能

2

优势:编码简单缺陷:随机数存在重复问题,即使在相同的时间戳下。每次插入数据库前需要校验下是否已经存在相同的数值。

方法三: 时间戳+会员ID
1

例如:S+yyMMddHHmmss+Math.abs(memberId.hashCode());[说明memberId为uuid的,String的hashCode唯一,而hashcode可能为负数]

2

优势:同一时间,一个用户不会存在两张订单     缺陷:会员ID也会透露运营数据,鸡生蛋,蛋生鸡的问题

方法4: GUID/UUID
1

方法:直接调用GUID/UUID生成方法.

2

优势:简单 劣势:用户不友好,索引关联效率较低。 UUID全称:Universally Unique Identifier,即通用唯一识别码。  UUID是由一组32位数的16进制数字所构成,所以理论上UUID的总数为16^32=2^128,约等于3.4*10^38。也就是每纳秒产生1兆个UUID,要花100亿年才会将所有UUID用完。  UUID的标准形式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符,如:550e8400-e19b-41d4-a716-446655440000。  UUID的作用  UUID是让分布式系统中的所有元素都能有唯一的辨识信息,而不要要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其他人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的UUID,的全局唯一标识符(GUID),而其他重要的应用,则有Linux ext2/ext3文件系统、LULS加密分区、GNOME、KDE、Mac OS X等等。  UUID的组成  UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。  UUID由以下几部分的组合  当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒后又生成了一个UUID,则第一个部分不同,其余相同。  时钟序列。  全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。  UUID的唯一缺陷在于生成的结果字符串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Ujique Identifiers)

推荐信息