需求:
1、订单号按尾号分表
2、可以按用户搜索到对应用户的分页订单
设计ID生成器
// 生成订单ID,1毫秒有小概率会产出重复ID function get_order_id($user_id) { $suffix = substr(strval($user_id), -3); $time = microtime(true) * 10000; $rand = mt_rand(0, 99); return intval($time . $rand . $suffix); } // 用hrtime高精度的生成毫秒部分,单机上解决了上面的生成器小概率生成重复的问题,仅用于php 7.3 function get_order_id2($user_id) { $suffix = substr(strval($user_id), -3); $time = time(); $nsec = hrtime()[1]; $msec = str_pad(intval($nsec / 1000), 6, "0"); // 保证进程内连续调用产生不一样的值 usleep(1); return intval($time . $msec . $suffix); } // TODO 跨机器的可以再借位生成不同机器的编码
该生成器可以生成最大999张分表的订单id