雪花算法
好处
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 //左移以后
}
雪花算法的优劣
优点:
- 可以根据时间递增
- 支持分布式部署
缺点:
严重依赖于服务器本身的时钟,如果服务器本身的时钟出现故障,就会导致生成的时间戳重复。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?