go-snowflake Golang分布式唯一ID生成库 go-snowflake

guaik • 11661 次点击    
这是一个分享于 的项目,其中的信息可能已经有所发展或是发生改变。
[![GuaikOrg/go-snowflake](https://gitee.com/GuaikOrg/go-snowflake/widgets/widget_card.svg?colors=ffffff,1e252b,323d47,455059,d7deea,99a0ae)](https://gitee.com/GuaikOrg/go-snowflake) # ❄️ GO-Snowflake ## Snowflake简介 在单机系统中我们会使用自增id作为数据的唯一id,自增id在数据库中有利于排序和索引,但是在分布式系统中如果还是利用数据库的自增id会引起冲突,自增id非常容易被爬虫爬取数据。在分布式系统中有使用uuid作为数据唯一id的,但是uuid是一串随机字符串,所以它无法被排序。 Twitter设计了Snowflake算法为分布式系统生成ID,Snowflake的id是int64类型,它通过datacenterId和workerId来标识分布式系统,下面看下它的组成: | 1bit | 41bit | 5bit | 5bit | 12bit | |---|---|---|---|---| | 符号位(保留字段) | 时间戳(当前时间-纪元时间) | 数据中心id | 机器id | 自增序列 ### 算法简介 在使用Snowflake生成id时,首先会计算时间戳timestamp(当前时间 - 纪元时间),如果timestamp数据超过41bit则异常。同样需要判断datacenterId和workerId不能超过5bit(0-31),在处理自增序列时,如果发现自增序列超过12bit时需要等待,因为当前毫秒下12bit的自增序列被用尽,需要进入下一毫秒后自增序列继续从0开始递增。 --- ## 快速开始 ### 安装 `git clone https://github.com/GUAIK-ORG/go-snowflake.git` ### 运行 `go run main.go`
授权协议:
开发语言:
golang 查看源码»
11661 次点击  
加入收藏 微博
1 回复  |  直到
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传