public static long gen() {
return ((System.currentTimeMillis() - 1609459200000L) << 23)
| (RANDOM.nextInt() & 0x7FFFFFL);
}
这个是用 Java 写的,给非 Java 的大佬们解释一下。
System.currentTimeMillis()
这个方法返回当前相比 1970 年 1 月 1 日 0 点 UTC 时间过了多少秒。RANDOM.nextInt()
返回一个随机的 32 位的有符号整数。相比正版的,这个少了 datacenterid,workid,也没有序列号,低 23 位完全就是个随机数。这套算法应用与 MySQL 的主键生成,而且应用可能是多活部署的,能打吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.