保证订单号的唯一性和连续性是一个重要的问题,以下是一些常见的方法:
UUID:UUID是一种通用唯一识别码,它可以生成一个全局唯一的标识符。UUID的标准形式包含32个16进制数字,以连字号分为五段,形式为8-4-4-12的36个字符。但是,UUID的缺点是无序的,每一次UUID数据的插入都会对主键底层的b+树进行很大的修改。
雪花算法(Snowflake):雪花算法是Twitter开发的一种全局唯一ID生成服务,它生成的ID是一个64位的整数,为一个Long型。这个算法可以根据时间有序生成ID12。在高并发情况下,雪花算法每秒能够产生约400万个自增可排序的ID。
数据库自增:在数据库中可以通过给订单列设置为自增列,并且给该列设置一个初始值。这样通过数据库实现订单的自增、无重复情况。但通过数据库实现并发能力低,单表存在只能有一个自增列的情况,后期对数据的分表处理也不够友好。
全局数据库:有一个全局数据库,这个数据库中只有一张订单表 (Order),表Order只有一个自增的字段Id,这个自增的字段Id就是订单号。所有生成订单的API会首先访问全局数据库的Order表获得订单号,然后再生成订单。这样就可以保证子库订单号不重复。
分布式组件:例如使用Redis作为分布式组件。通过Redis的队列、incr等功能来实现