一. 订单命名的几种规则
- 不重复:订单号的唯一行
- 安全性:订单编号中不要透露任何和公司有关的信息,不要使用流水号,容易暴露公司的运营情况
- 不要使用大规模随机码:随机编码可以满足安全性,但为了满足不重复性要费很大的力气。比如现在已经有了10万条订单,如果再新生成的订单,它的订单号需要与之前的10万条数据的订单号进行比较,结果可想而知。
- 防止并发
- 控制位数:一般在10~15位最好
二. 淘宝订单号的生成规则
- 总共18位
- 前14位为序号
- 5-16位买家ID的倒数1-2位
- 17-18位买家ID的倒数3-4位
三. 订单号设计用户体验规则
- 订单号无重复性;
- 订单号尽量保持数字型(纯整数),在数据库订单索引查询中,长整数字型的数据索引与检索效率,远远高于文本型,因此尽量避免“字母+数字字符串式”!
四. 订单号的几种生成方式
- mysql的自增长(不能使用):以后数量大的时候,需要对mysql进行分库分表,此时订单号会重复
- 日期+随机数(不推荐):仍然可能会重复
- UUID:长,不利于阅读
- GUID由算法自动生成,理论全球唯一的值,但记录不方便

- 年月日时分秒微秒+随机码(2)+流水号+随机码(3):推荐
- redis的incr命令(推荐):可读性好,纯数字,不会太长。
String res = jedis.get(KEY);
if (StringUtils.isBlank(res)) {
jedisClient.set(KEY, INIT_ID);
}
long orderId = jedis.incr(KEY);
- Twitter的分布式自增ID算法snowflake