分布式ID生成
分布式ID生成
1.1 为什么使用分布式ID
1.2 分布式ID解决方案
1). UUID
UUID 可以保证每一次生成的ID不重复 ;
缺点 :
- 长度比较长 , 占用磁盘空间
- 无法排序
2). Redis
通过redis的指令 incr指令, 来实现一个自增的主键 , 可以保证ID不会重复 , 并且线程安全 ;
实现:
incr orderid
缺点 : - 借助于redis数据库 ;
3). 雪花算法
自己编写的一种算法实现 , 是推特网站提供的一种分布式ID生成机制 ; 不需要借助于第三方服务, 性能高;
64 = 1 + 41 + 10(5 + 5) + 12 ;
5: 代表数据中心ID
5: 代表机器ID
1.3 雪花算法实现
IdWorker idWorker = new IdWorker(0,0);
for(int i=0;i<1000;i++){
long id = idWorker.nextId();
System.out.println(id);
}
将IdWorker交给Spring管理 :
@Value("${workerId}")
private Integer workerId;
@Value("{datacenterId}")
private Integer datacenterId;
@Bean
public IdWorker idWorker(){
return new IdWorker(workerId,datacenterId);
}