go实现雪花算法

go实现雪花算法

唯一ID可以说是分布式场景下最常见的需求了,前几天发现有一个服务里面使用的唯一ID直接使用的纳秒时间戳

Id := time.Now().UnixNano()
这种唯一ID获取方式有没有什么问题了?

1.大并发情况下,有没有Id冲突?

2.多节点部署情况下有没有Id冲突?

3.如果有多个数据中心表数据要合并怎么办?

所以我们的选择一个更合适的唯一Id生成方案

在分布式场景下生成唯一ID方式有很多比如:

1.使用MySQL的自动增量 。优点实现简单,数据持久化,缺点并发不要,在多数据中心下数据无法合并。

2.使用redis incr 。 优点并发高,缺点无法持久化 。(这里要强调一点,redis默认和常用的持久化策略是有1s间隔的)

3.雪花算法。 优点 性能高,实现不去复杂 缺点:依赖计算机时钟,如果时钟错误可能导致Id回滚。
下面给一个雪花算法具体实现:
https://articles.zsxq.com/id_2d5vftkn7l45.html

你可能感兴趣的:(go,算法)