技术背景
在日常业务开发的时候,我们经常需要随机生成一个id,保证生成的id不重复,来进行区分。有些是需要生成递增的id,
技术应用场景
场景一:订单号生成
高并发的电商平台中,为了保证订单号的唯一性和顺序递增,分布式生成id作为订单号
场景二:数据库主键生成
数据库分库分表中,避免多个节点插入相同的主键值,使用分布式id生成不重复的主键
场景三:数据消息队列的幂等性
多次消费同一条消息不会产生副作用。使用分布式id可以标识每条消息的唯一性,避免消息被重复消费
场景四:日志的唯一标识
在分布式系统中,为了方便追踪和分析日志,可以使用分布式id作为每条日志的唯一标识
技术实现
一基于数据库
在一个数据库中创建一个唯一自增的序列,每次生成ID时向数据库中插入一条记录并获取ID,仅限于单机部署
二基于UUID
使用UUID算法对UUID进行生成,UUID在实现上使用了时间戳、计算机MAC地址和其他参数,保证了唯一性,但UUID过长,存储和传输成本较高
三雪花算法
使用一个64位的long类型的数字来表示生成的id,可以拆分为时间戳、节点ID和自增序列号三个部分,这种方式不需要进行网络通信,也不需要使用数据库支撑