使用shardingJDBC中的雪花算法生成id

常用ID解决方案

数据库自增id

  • 依靠数据库系统的功能实现,但是未来扩容麻烦
  • 主从切换时的不⼀致可能会导致重复发号
  • 性能瓶颈存在单台sql上

UUID

  • 性能非常高,没有网络消耗
  • 无序的字符串,不具备趋势自增特性
  • UUID太长,不易于存储,浪费存储空间,很多场景不适用

Redis发号器

利用Redis的INCR和INCRBY来实现,原子操作,线程安全,性能比Mysql强劲

需要占用网络资源,增加系统复杂度

Snowflake雪花算法

雪花算法(Snowflake)是twitter公司内部分布式项目采用的ID生成算法

ID在内存生成,不依赖于数据库,高性能高可用

每秒可生成几百万ID,容量大

由于ID呈趋势递增,插入数据库后,使用索引的时候性能较高

代码实现简单、不占用宽带、数据迁移不受影响
生成的 id 中包含有时间戳,所以生成的 id按照时间递增
部署了多台服务器,需要保证系统时间⼀样,机器编号不⼀样

依赖系统时钟(多台服务器时间⼀定要⼀样)

 Snowflake生成的是Long类型的ID,一个Long类型占8个字节,每个字节占8比特,也就是说一个Long类型占64个比特

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值