基于Snowflake的分布式唯一ID生成器

本文介绍了基于Twitter的Snowflake算法实现分布式唯一ID生成器,并探讨了数据库自增ID、UUID、Redis生成ID的优缺点。在Snowflake的基础上,作者提出了一种改进实现,利用IP后24位作为worker id,避免了数据库依赖,适用于Kubernetes环境。文章还讨论了如何在分布式环境中选择合适的ID生成策略。

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

项目地址

先上我的实现的项目地址:https://github.com/johnhuang-cn/snowflake-uid

常见的UID优缺点

数据库自增ID

简单可靠,有序,可读性好,性能也不错。缺点是要锁表,性能会有瓶颈,分库特别是已分库的情况再扩容时会比较麻烦。

UUID

全球唯一,性能好,缺点是太长了,存储空间大,索引性能不好,长度太长使用起来也不方便。另外部分UUID算法生成的不是趋势递增的。

Redis生成

性能好,有序,可读性好。缺点是为了防单点故障,需要引入Redis集群,增加了额外编码和配置的工作量。

Snowflake生成ID

twitter开发的一套全局唯一ID生成算法,要点如下:

41位的时间序列(精确到毫秒,41位的长度可以使用69年)
10位的机器标识(10位的长度最多支持部署1024个节点)
12位的计数顺序号(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
最高位是符号位,始终为0。
简单可靠,性能好,趋势有序,不引入第三方系统。缺点是有使用时间限制,8-100年不等,序列不是连续有序。

如何选择

在分布式下,考虑到性能,存储效率和使用方便性,一般不会直接用UU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值