大佬们来看一下我这个丐中丐版本的 Snowflake ID 生成算法有没有什么问题?

2021-04-26 14:44:02 +08:00
 qwerthhusn
public static long gen() {
  return ((System.currentTimeMillis() - 1609459200000L) << 23)
       | (RANDOM.nextInt() & 0x7FFFFFL);
}

这个是用 Java 写的,给非 Java 的大佬们解释一下。

  1. System.currentTimeMillis()这个方法返回当前相比 1970 年 1 月 1 日 0 点 UTC 时间过了多少秒。
  2. 1609459200000L 是 UTC 时间 2021 元旦凌晨。
  3. RANDOM.nextInt()返回一个随机的 32 位的有符号整数。

相比正版的,这个少了 datacenterid,workid,也没有序列号,低 23 位完全就是个随机数。这套算法应用与 MySQL 的主键生成,而且应用可能是多活部署的,能打吗?

463 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/773349

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX