背景
生成唯一订单号是在设计系统时候经常会遇到的一个问题,生成唯一订单号的方法有很多,为了适应不同的场景和性能,选择的方法也会不一样,有些复杂的系统会有多套这种唯一编码生成方式。
利用数据库自增序列
利用数据库自增序列,比如新建一张表,专门插入数据,获取新增记录的主键值,为了订单号的可读性,可以由
年月日 时间戳 auto_increment
值,这种方式能保证唯一性、递增性,实现也较为简单,缺点就是每次都要连接数据库,插入一条数据来获取自增主键,性能较差,且后续有数据合并场景,订单号可能会重复。
redis
代替数据库生成ID利用Redis的原子操作
INCR和INCRBY来实现
,这个自增值也是唯一的,
性能要优于数据库。UUID
可以利用数据库,也可以利用代码生成,全球唯一,性能较高,生成的一坨
字符串
,可读性较差,字符串一般32位,也有48位的,存储空间较大,作为主键索引查询较慢,但后续如果有合并数据需求,很方便,因为每次生成的都是全球唯一的。雪花算法
由
弥补了UUID的不足
,它是单调递增的,可包含一定的业务意义,有序的ID能够提高数据库写入性能。业务常见的唯一编码有这些,没有最好的,根据业务场景选择适用的就行。