订单号的生成规则和不同生成策略-总结
订单号的不同生成策略-总结
一. 订单命名的几种规则
不重复:订单号的唯一行安全性:订单编号中不要透露任何和公司有关的信息,不要使用流水号,容易暴露公司的运营情况不要使用大规模随机码:随机编码可以满足安全性,但为了满足不重复性要费很大的力气。比如现在已经有了10万条订单,如果再新生成的订单,它的订单号需要与之前的10万条数据的订单号进行比较,结果可想而知。防止并发控制位数:一般在10~15位最好
二. 淘宝订单号的生成规则
总共18位前14位为序号15-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);//INIT_ID是自己设置的初始值
}
long orderId = jedis.incr(KEY);//存在就生成+1的订单号
Twitter的分布式自增ID算法snowflake
链接: 订单号生成规则
不重复订单号生成的方法
淘宝的订单号规则