欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

分布式——分布式订单号生成策略 (1)

程序员文章站 2022-03-10 17:00:20
需求:下订单,查看过自己的订单号规律?全局唯一趋势递增,不是严格递增1、2、3、4长度固定整形,不是字符串安全性高并发策略一:UUID/GUID(通用唯一标识码)——适合单体应用用到了以太网卡地址(MAC)、纳秒级时间、芯片ID码和许多可能的数字。优点:使用简单不依赖其他组件不影响数据库拓展缺点:数据库索引效率低太过于无意义,用户不友好长度36的字符串,空间占用大应用集群环境,机器多的时候,重复几率大策略二:数据....

需求:下订单,查看过自己的订单号规律?

 

  1. 全局唯一
  2. 趋势递增,不是严格递增1、2、3、4
  3. 长度固定
  4. 整形,不是字符串
  5. 安全性
  6. 高并发

策略一:UUID/GUID(通用唯一标识码)——适合单体应用

用到了以太网卡地址(MAC)、纳秒级时间、芯片ID码和许多可能的数字。

  • 优点:
    • 使用简单
    • 不依赖其他组件
    • 不影响数据库拓展
  • 缺点:
    • 数据库索引效率低
    • 太过于无意义,用户不友好
    • 长度36的字符串,空间占用大
    • 应用集群环境,机器多的时候,重复几率大

 

策略二:数据库自增

  • 优点
    • 无需编码
    • 性能过得去
    • 索引友好
  • 缺点
    • 大表不能做水平分表,否则插入删除易出现问题
    • 依赖前期规划,拓展麻烦
    • 依赖MySQL内部维护“自增锁”,高并发下插入数据影响性能
    • 在业务操作父、子表(关联表)插入时,要“先父后子”

 

策略三:推特的雪花算法

  • 优点
    • 性能较优,速度快
    • 无需第三方依赖,实现也很简单
    • 可以根据实际情况调整和扩展算法,方便灵活

 

策略四:基于Redis自增

Redis性能很高的原因是什么?操作物理内存,IO多路复用,单线程

  • 优点
    • 扩展性强,可以方便的结合业务进行处理
    • 利用Redis操作原子性的特性,保证在并发的时候不会重复
  • 缺点
    • 引入Redis就意味着引入其他第三方的依赖
    • 增加一次网络开销
    • 需要对Redis服务实现高可用

 

 

本文地址:https://blog.csdn.net/ybshengkai00/article/details/107583419

相关标签: java 分布式