编程语言
首页 > 编程语言> > 雪花算法

雪花算法

作者:互联网

好处

ID 可以根据时间 有序 生成。

原理

SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型 的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解。

64个 bit 位

这 64 个bit中:

雪花算法的具体代码

下面是伪代码,高级操作就是后面的 位运算

func main() {
	timebit := time.Now().UnixNano() / 1e6 //毫秒和纳秒是 10 的六次方
	workid := 3                            //本机id
	lastime := time.Now()
	nowtime := time.Now()
	var n int
	if nowtime == lastime { //如果和上次时间一样
		n++
		if n > 4096 {
			n = 0
			panic("已经超出了最大个数")
		}
	} else {
		n = 0
		lastime = nowtime
	}
	id := now<<22 || workid<<12 || n //左移以后
}

雪花算法的优劣

优点:

  1. 可以根据时间递增
  2. 支持分布式部署

缺点:
严重依赖于服务器本身的时钟,如果服务器本身的时钟出现故障,就会导致生成的时间戳重复。

标签:lastime,nowtime,雪花,算法,bit,Now,id
来源: https://www.cnblogs.com/rush-peng/p/15241407.html