大型系统设计核心技术(第一篇)---分布式订单号生成策略

本文探讨了四种分布式订单号生成方法:UUID、数据库自增序列、雪花算法和基于Redis的自增。分析了每种方法的定义、用法及优缺点,提供了代码示例,强调技术选型应根据业务场景进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用UUID生成

1.定义

UUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。

2.用法
在java使用UUID非常简单,在jdk的工具类中已经有生成UUID的类可以直接使用,如下:
代码实例:
在这里插入图片描述
运行结果:
在这里插入图片描述
可以看出在单机环境下,生成的uuid不会重复

3.优缺点

优点 缺点
使用简单 数据库索引效率低(这里针对mysql的b+树索引而言)
不依赖其他组件,直接是使用jdk工具类 太长无意义,用户不友好
不影响数据库的拓展 空间占用大
在应用集群环境,机器多的时候,重复几率很大!!!

二、使用数据库自增序列生成

1.定义
利用数据库,全数据库唯一。
2.用法
设置mysql数据库自增长起始值以及步长,多个不同数据库应设置不同起始值,而步长设置一致,则每个数据库生成的自增序列码可以避免相同。
以一个数据库中设置为例:
代码:

SHOW VARIABLES like 'auto_inc%';//查看自增相关变量值
set auto_increment_increment=100;//设置步长
set auto_increment_offset=1;//设置起始值
INSERT into `user`VALUES(null);//模拟插入数据

结果运行图:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值