订单号的生成规则和不同生成策略

一. 订单命名的几种规则

  1. 不重复:订单号的唯一行
  2. 安全性:订单编号中不要透露任何和公司有关的信息,不要使用流水号,容易暴露公司的运营情况
  3. 不要使用大规模随机码:随机编码可以满足安全性,但为了满足不重复性要费很大的力气。比如现在已经有了10万条订单,如果再新生成的订单,它的订单号需要与之前的10万条数据的订单号进行比较,结果可想而知。
  4. 防止并发
  5. 控制位数:一般在10~15位最好

二. 淘宝订单号的生成规则

  1. 总共18位
  2. 前14位为序号
  3. 5-16位买家ID的倒数1-2位
  4. 17-18位买家ID的倒数3-4位

三. 订单号设计用户体验规则

  1. 订单号无重复性;
  2. 订单号尽量保持数字型(纯整数),在数据库订单索引查询中,长整数字型的数据索引与检索效率,远远高于文本型,因此尽量避免“字母+数字字符串式”!

四. 订单号的几种生成方式

  1. mysql的自增长(不能使用):以后数量大的时候,需要对mysql进行分库分表,此时订单号会重复
  2. 日期+随机数(不推荐):仍然可能会重复
  3. UUID:长,不利于阅读
  4. GUID由算法自动生成,理论全球唯一的值,但记录不方便在这里插入图片描述
  5. 年月日时分秒微秒+随机码(2)+流水号+随机码(3):推荐
  6. redis的incr命令(推荐):可读性好,纯数字,不会太长。
	String res = jedis.get(KEY);
    if (StringUtils.isBlank(res)) {
        jedisClient.set(KEY, INIT_ID);//INIT_ID是自己设置的初始值
    }
    long orderId = jedis.incr(KEY);//存在就生成+1的订单号
  1. Twitter的分布式自增ID算法snowflake

你可能感兴趣的:(java)