• 商品订单ID简易算法


    算法目标:支持中小型支付系统,单机房生成订单号QPS<=1w,保证订单号绝对唯一,机房内趋势递增;

    序列号生成算法(字符串订单号):

    {2字节,机房唯一序列号}{14字节,年月日时分秒}{3字节,毫秒}{3字节,微秒}{4字节,自增序列号}

    举例:

    机房A:

    "{01}{20171028195147}{655}{851}{0001}" =》"01201710281951476558510001" 

    "{01}{20171028195147}{655}{851}{0002}" =》"01201710281951476558510002"


    机房B:
    "{02}{20171028195147}{010}{118}{0001}" =》"02201710281951470101180001"

    分析:

    机房序列号:机房唯一标识,自分配

    年月日时分秒:如题

    毫秒:如题

    微秒:如题

    自增序列号count:这里使用redis集群(同机房机器须使用相同的集群)生成,根据"{2字节,机房序列号}{14字节,年月日时分秒}{3字节,毫秒}{3字节,微秒}"作为key,使用INCR命令生成,当INCR返回1时,给KEY设置过期时间EXPIRE,防止同一微秒生成相同的订单号

    伪代码如下:

    cout = INCR 0120171028195147655851
    if count == 1:
    EXPIRE 0120171028195147655851 60
    最终订单号 = "01201710281951476558510001" 

     看到另一个不错的实现算法

    function build_order_no(){
      return "ID".date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
    }

    这套算法可以支撑非大型电商平台的订单系统,如果要追求更高的QPS,可以参考snowflake算法;
    ————————————————


    版权声明:本文为CSDN博主「带鱼兄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/daiyudong2020/article/details/78378490

    既不回头,何必不忘; 既然无缘,何须誓言; 今日种种,逝水无痕; 明夕何夕,君已陌路;
  • 相关阅读:
    测试软件—禅道BUG管理工具
    C语言 线性表的操作~(未完)
    数据库考纲~
    圣杯布局和双飞翼布局总局
    总结布局用法
    springboot~入门第三篇~与mybatis整合~(未完)
    微信小程序里 wx:for和wx:for-item区别(补充下wx:key)
    对比下小程序语法和Vue语法异同
    视频转换 rtsp 流 转rtmp流播放(待完善)
    Vue钩子函数~
  • 原文地址:https://www.cnblogs.com/zyjfire/p/12958302.html
Copyright © 2020-2023  润新知