雪花算法
2021/9/8 11:06:19
本文主要是介绍雪花算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
好处
ID
可以根据时间 有序
生成。
原理
SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型
的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解。
64个 bit 位
这 64 个bit中:
-
其中 1 个 bit 是不用的(二进制中,第一位是
1
的表示负数) -
其中的 41 bit 作为毫秒的时间戳(可以表示69年)
-
用 10 bit 作为工作机器 id (十位,所以最多可以部署在
1024
台服务器上) -
12 bit 作为序列号。(表示同一个毫秒内生成的第几个
Id
,最多可以生成 4096个id)
雪花算法的具体代码
下面是伪代码,高级操作就是后面的 位运算
。
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 //左移以后 }
雪花算法的优劣
优点:
- 可以根据时间递增
- 支持分布式部署
缺点:
严重依赖于服务器本身的时钟,如果服务器本身的时钟出现故障,就会导致生成的时间戳重复。
这篇关于雪花算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性